値オブジェクトまたは団体のオブジェクトマHibernateのマッピング?
-
18-09-2019 - |
質問
ようにしているデザインのインターネットはモバイルアプリや取得していたビットの混乱と、Hibernateの定義のエンティティ値のオブジェクトとして定義された第4章ではJavaの永続化とHibernate).
私はアプリお客様とのできる注文に多くの関係).それぞれの受注が多く順序回線(もく).現在、というお客様のアイデンティティ(お客様番号、その発注(受注番号)では、これが企業物?私の混乱が定める。
ための線量、商品数および価格です。注文するのではないが存在しないため、ない人、そして私はこれまでの値をオブジェクトです。が作ができませんの為の一部を表している多くの関係とそのめます。かつ多くの関係の定義の値をオブジェクト?から、Hibernateの本:
"オブジェクトの値の型がないデータベースのデザインでの所属する法インスタンスとその持続状態を埋め込みのテーブルの行の保有する。値型のない識別子または識別子の性質"
誰もが明らかに私の混乱ことに感謝していする)
解決
Hibernateのドキュメントでこの区別 体タイプ や 値型, 価格ではなくオブジェクトです。
- オブジェクトのタイプ:独自のデータベースティ
- オブジェクトの値の型:に属する主体とその持続状態を埋め込みのテーブルの行の保有する。値型のない識別子または識別子です。
調査を実施しているのは、同じ思をサンプルと address
で表される単一文字列として、 user
オブジェクトを含むアドレス文字列:
実施してい値タイプ(通常というカラムが同じテーブルのデータベースレベル)の場合、ユーザーが削除され、そのアドレスです。の住所なのに、ユーザーで共有する必要があります。
実施主体としての種がもたらされる可能性が使用することは別のテーブル)のアドレスが存在する自らの権のないユーザーやユーザーが共有できるように同じアドレスです。
このケースでは、線として捉えられるべきだと思い、その永続的な組み込みの順に行な意味において最も使用されている独自のアイデンティティ(にorderidトランザクションとproductId).特注ラインはレコード店ディスクユニオンが値型では、企業タイプです。
実際、どんの観点から物事を考える会(一対一対多など、確実に操る。
他のヒント
私は何を持っていることは、むしろ一般的なORMの質問だと思います。
あなたは言及した「のためのラインはその順序なしで存在し、の、自分自身のアイデンティティがないことはできない」と。
オーダーラインが注文して存在できないもののまあ、それはアイデンティティを持つことができないという意味ではありません。
あなたのOrderエンティティを取る、それは顧客なしで存在することはできませんが、すでにいや、エンティティとして見なさ?
だから、ここエンティティのための提案です:
- お客様が
(なし以上の注文エンティティを持つことはできません)
- ご注文
(一個の以上のOrderLineエンティティを持つことができます)
- オーダーライン
私はあなたが複合要素を探していると思います。実際に注文してpurchasedItems(オーダーライン)を使用して参照の例があります。 Hibernateはそれだけでは我慢できないと言うとき、それはその、常に親要素に関連付けられているだけであること、それは自身のテーブルを持つことができないという意味ではありません。
<class name="eg.Order" .... >
....
<set name="purchasedItems" table="purchase_items" lazy="true">
<key column="order_id"/>
<composite-element class="eg.Purchase">
<property name="purchaseDate"/>
<property name="price"/>
<property name="quantity"/>
<many-to-one name="item" class="eg.Item"/>
</composite-element>
</set>
</class>
から:オブジェクトの
の値オブジェクトは等価アイデンティティに基づいていない単純なエンティティを表す小さなオブジェクトである:それらは必ずしも同じobjecect
であり、同じ値を有する場合、すなわち2つの値オブジェクトが等しいですきのためにラインとしての価値の型と値の型がサポートされているとの一対一のマッピングなどに多くのマッピングしました。明らかにJavaのコレクション用地図の対多の関係の値をタイプする。内部の適切な収集、素子ならびに複合素子を使用し、必要に応じて以下のとおりです:のために多くの関係者および値型の非JDK型) 複合素子 を使用します。のために多くの関係性で価値の型のテーブルを含む単一の属性のJDKのタイプ(文字列), 要素 を使用します。このコンセプトは第6章のJavaの永続化とHibernate.詳細については、このリンク https://docs.jboss.org/hibernate/orm/3.5/reference/en/html/components.html