A2 つのエンティティとを例に取りましょうB。それぞれAに多数の が関連付けられている場合がありますB。それぞれBが正確に 1 つの に関連付けられていAます。この Hibernate との関係を次のように表します。
@Entity
public class A {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "AId")
private Long id;
@Column(name = "AName", nullable = false, unique = true)
private String name;
@OneToMany(cascade = CascadeType.ALL)
@JoinTable(name = "A_B", joinColumns = { @JoinColumn(name = "AId") }, inverseJoinColumns = { @JoinColumn(name = "BId") })
private Set<B> bs = new HashSet<B>();
}
@Entity
public class B {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "BId")
private Long id;
@Column(name = "BName")
private String name;
@ManyToOne(optional = false)
@JoinColumn(name = "BA")
private A a;
}
このマッピングから DB を生成すると、次のようになります。
- 表
A。 A_B2 つの列を持つ結合テーブル:AIdとBId.AId主キーにBId属します。また、からへのOneToMany関連付けがあるため(つまり、1 つの に多数の が関連付けられていて、1 つは 1 つの にのみ関連付けられている)、一意の制約が に追加されます。ABABBABId- tableのキー参照列である which を
B含む列を含むテーブル。BAforeignAIdA
についてはjoin table、
OneToManyHibernate が関係をこのようにマッピングするのはなぜですか?- 主キーを 1 つの列 (
BId) で構成されるように定義するだけで、同じ規則が適用されます。 - マッピングがこのように行われる理由はありますか?
- このようなマッピングの利点/欠点は何ですか?
私は正確に私が使用してHibernate 4.1.6.Finalいます。