@JoinColumn
はEntity
に別のEntity
への外部キーを与えますが、@JoinTable
は、Entity
AとEntity
Bの間のすべての関係の間の関係をリストします。私が知る限り、どちらも同じようなことをしているように見えます。どちらを使用すればよいですか?
A
というエンティティがあり、@ManyToOne
エンティティとの関連付けB
@ JoinColumn は、ターゲットテーブルの外部キーを定義します(例:B_ID
)ターゲットエンティティテーブルを使用しているとき(例:B
)。
@Entity
public class A {
private Long id;
@ManyToOne
@JoinColumn(name="B_ID")
private B b;
}
@ JoinTable は、別のテーブルを使用して、A
とB
の関係を保持します。
@Entity
public class A {
private Long id;
@ManyToOne
@JoinTable(
name = "A_B",
joinColumns = @JoinColumn(name = "B_ID"),
inverseJoinColumns = @JoinColumn(name = "A_ID")
)
private B b;
}
今回はA
もB
も外部キーを含んでいません。これは、別個のテーブルがあるためです(例:A_B
)A
とB
の間の関連付けを保持します。
@JoinTableは両方のテーブルのIDを別のテーブルに格納し、@ JoinColumnは別のテーブルのIDを新しい列に格納します。
@JoinTable:これはデフォルトのタイプです。より正規化されたデータベースが必要な場合に使用します。すなわち。冗長性を減らすため。
@JoinColumn:追加のテーブルを結合する必要がないため、これを使用してパフォーマンスを向上させます。