@JoinColumn関係の両側で使用できます。質問はサイドでの使用についてでし@JoinColumnた@OneToMany(まれなケース)。そして、ここでのポイントは、いくつかの追加のステートメントを生成する最適化されていないSQLクエリとともに、物理情報の複製(列名)にあります。UPDATE
ドキュメントによると:
JPA仕様では、多対1は(ほぼ)常に双方向関係の所有者側であるため、1対多の関連付けには次の注釈が付けられます。@OneToMany(mappedBy=...)
@Entity
public class Troop {
@OneToMany(mappedBy="troop")
public Set<Soldier> getSoldiers() {
...
}
@Entity
public class Soldier {
@ManyToOne
@JoinColumn(name="troop_fk")
public Troop getTroop() {
...
}
TroopSoldiertroopプロパティを介して双方向の1対多の関係があります。mappedByサイドで物理マッピングを定義する必要はありません(してはいけません) 。
1対多側を所有側として双方向の1対多をマップするには、mappedBy要素を削除し、多対1@JoinColumnをfalseに設定する必要がinsertableあります。updatableこのソリューションは最適化されておらず、いくつかの追加のUPDATEステートメントが生成されます。
@Entity
public class Troop {
@OneToMany
@JoinColumn(name="troop_fk") //we need to duplicate the physical information
public Set<Soldier> getSoldiers() {
...
}
@Entity
public class Soldier {
@ManyToOne
@JoinColumn(name="troop_fk", insertable=false, updatable=false)
public Troop getTroop() {
...
}