@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() {
...
}
Troop
Soldier
troopプロパティを介して双方向の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() {
...
}