hibernate がこれらのクラスに結合テーブルを使用するのはなぜですか?
@Entity
public class CompanyImpl {
@OneToMany
private Set<Flight> flights;
@Entity
public class Flight {
結合テーブルも双方向の関連付けも必要ありません:(
hibernate がこれらのクラスに結合テーブルを使用するのはなぜですか?
@Entity
public class CompanyImpl {
@OneToMany
private Set<Flight> flights;
@Entity
public class Flight {
結合テーブルも双方向の関連付けも必要ありません:(
そのように設計されており、JPA 仕様がそのような関連付けをマップするように指示しているためです。Flight テーブルに結合列が必要な場合は、次を使用します。
@Entity
public class CompanyImpl {
@OneToMany
@JoinColumn(name = "company_id")
private Set<Flight> flights;
}
これは文書化されています。
上記の回答は十分に精緻化されているとは思わないので、これが役立つことを願っています
理由。Hibernate が結合テーブルを作成する理由。
実装により、外部キーは常に多側に保持されるため、Hibernate は一方向 OneToMany の結合テーブルを作成します。したがって、あなたの例では、外部キーは Flight テーブル側に保持され、Hibernate が JoinTable を作成することを選択する Many 側で null 値を持つことを防ぎます。
あなたの例で言えば、
すべての Flight には CompanyImpl 列があり、設定されていない場合は null にする必要があるため、特定の Flight レコードで null を回避するために、Hibernate は Flight と CompanyImpl の ID を格納する JoinTable を持つことを選択します。