2009-08-20 2 views
30

(単方向セクションまでスクロール):Hibernate単方向の1対多の関連付け - なぜ結合テーブルの方が優れていますか?この文書で

http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#entity-mapping-association-collections

それが結合テーブルを持つ単方向一対多関連はあまりばかりの外部キー列を使用してすることが好ましいと述べています所有エンティティ。私の質問は、なぜそれがずっと好まれているのでしょうか?

+0

http://stackoverflow.com/questions/2092611/why-is-it-recommended-to-avoid-unidirectional-one-to-many-association-on-a-foreiを参照してください –

答えて

36

所有しているエンティティタイプを別の親エンティティタイプでも所有できる状況を考えてみます。所有しているテーブルの外部キー参照を両方の親テーブルに入れますか? 3つの親タイプがある場合はどうなりますか?それは単に大きなデザインには適用されません。

ジョイン・テーブルはジョインを切り離すため、所有するテーブルには親テーブルは認識されず、デザインをエレガントにスケールすることができます。

+1

違いを参照してください。結合テーブルと外部キーで呼び出されている内部SQL操作の詳細については、http://stackoverflow.com/q/18333198/418439 –

11

子エンティティに親タイプが1つしかない場合、結合テーブルは必要ありません。 私はこれをJPAでやったことがあります(休止状態のimplで)。

利点: 1つ少ないテーブル。おそらくパフォーマンスが良いでしょう。 「このテーブルは何ですか?」タイプの質問。

短所: OOの観点からは、子と親の間に追加の依存関係が導入されています。実際には、関係は子供の中で私的なので、これはおそらくそれほど大きな問題ではありません。

 
e.g. 
parent: 
@OneToMany(mappedBy = "parent", cascade = CascadeType.ALL) 
@MapKey(name = "name") 
private Map children; 

child: 
@ManyToOne(optional = false) 
private Parent parent; 
+0

を参照してください。 –

+0

洗練された欠点。 – Conor

+0

JPA 2.0では、親に対する子の参照はもはや必要ではないことに注意してください。親に対して@JoinColumnアノテーションを使用するだけです。 –

関連する問題