web-dev-qa-db-ja.com

用語の明確化:エンティティの「ハイドレート」:DBからのプロパティの取得

ORM /エンティティの遅延読み込みのコンテキストでは、「ハイドレーション」という用語の私の理解は次のとおりです。

「ハイドレート」とは、遅延読み込みを使用してフェッチされたエンティティの以前に未入力の属性の一部またはすべてを設定するプロセスを示します。

例:クラスAuthorはデータベースからロードされます:

@Entity
class Author
{
     @Id
     long id;
     List<Book> books;
}

最初は、booksコレクションには値が設定されていません。

データベースからbooksコレクションをロードするプロセスは、コレクションの「ハイドレート」と呼ばれることを理解しています。

この定義は正しいですか?また、用語は一般的な場所ですか?このプロセスに使用する必要がある他のより一般的な用語はありますか?

64
Marty Pitt

ハイドレートは、インスタンス化された(ただし空の)値オブジェクト/モデルをdbから取り込むための用語として始まりました(特にHibernateで)。

BizTalkのような他のさまざまなORMおよびツールは、ハイドレートおよびその他の関連用語を使用します(例:BizTalkは、インスタンスが利用可能であるがまだ設定されていないことを意味するDehydratedという用語を使用します)

個人的には冗長な用語の見直しに嫌気がさしています。populatedは同じことを意味し、言語を再発明することはありません。それは何も追加せず、混乱をもたらします(再発明された用語に遭遇する際の一般的な最初の考え:これは何らかの形で異なり、魔法のようですか?)。

このスタイルの言語のBizTalk拡張機能、特にDehydratedは冗長です。 empty、またはclear

Hydratedとその関連メタファーは、Hibernateと競合製品を区別するために考案されたマーケティングツールです。

この時点で、Hibernateおよび他のORM製品はこれらの用語を長年使用しているため、ハイドレート(およびデハイドレート)はここにあります。

116
ocodo

Hibernateの命名法では、 ハイドレーションはJDBC ResultSetが生の値の配列に変換されるとき

final Object[] values = persister.hydrate(
    rs, id, object,
    rootPersister, cols, eagerPropertyFetch, session
);

水和状態は、現在実行中の永続コンテキストに EntityEntry オブジェクトとして保存されます。これは、読み込み時のエンティティスナップショットをカプセル化します。水和状態は次のように使用されます:

  • 現在のエンティティデータを読み込み時のスナップショットと比較するデフォルトのダーティチェックメカニズム
  • キャッシュエントリが読み込み時のエンティティスナップショットから構築される2次キャッシュ

逆の操作は dehydration と呼ばれ、エンティティの状態をSQL INSERTまたはUPDATEステートメントにコピーします。

7
Vlad Mihalcea

水分補給は大まかな用語です。私たちの会社では、オブジェクトグラフ全体のすべてのオブジェクトプロパティを読み込むために、彼が言う「リハイドレーション」を使用します。 ここに投稿があります さまざまなレベルの水分補給について話します(これは休止状態のコンテキストで使用していますが、これも一般的な使用法です)。

4

ORMのコンテキストにおける「水和物」という用語は、フレームワークがオブジェクトを提供することを意味しているだけだと思います。そのため、データがストアからプルされた後、オブジェクトはORMによって「水和」されます。この用語は、ORMフレームワークがストアで表現されるオブジェクト/グラフを提供するときにいつでも適用できます。

2
hvgotcodes

ハイドレーションという用語は、最近読み込まれたオブジェクトのフィールドを設定するプロセスを指すためにhibernateライブラリの内部で広く使用されており、実際にオブジェクトグラフの人口に関連しています。
しかし、それは遅延読み込みの概念とは異なります。つまり、ユーザーに半分満たされたオブジェクトを提供し、残りをオンデマンドで読み込むようにします。
水分補給は常に怠ziまたは熱心に行われ、冬眠状態です。
遅延読み込みは便宜上のものです

hibernateを選択したormの名前に置き換えます

0
jpertino

Hydrationは、クエリ結果が返されるmethodを意味する一般的なORMドメイン用語です。それはプロセスではなく、動詞でも、アクションやイベントでもありません。名詞です。したがって、hydratingは、水和を使用すること、つまりその特定のmethodを使用することを意味するだけであり、したがって、それ自体では何ももたらしません- 使用しないでください。特定のハイドレーションは、オブジェクトをインスタンス化し、参照を返す前にオブジェクトを設定できますが、一般にハイドレーションは設定を意味しません。異なる水和は異なる構造を返します:

  • 特異スカラー
  • スカラーの配列
  • 配列の配列
  • オブジェクトの配列
  • オブジェクト収集スカラー
  • オブジェクト収集配列
  • 他のオブジェクトを収集するオブジェクト
  • ...もっと

これはORM実装の詳細です。複数のハイドレーションを提供するORMがあり、クエリビルダーに引数を渡すことで1つを選択できます。一部のORMは、その制御を提供せず、通常は誤った仮定につながるスマートにしようとする慣習に置き換えます。

0
cprn