0
讓我們以兩個實體A
和B
爲例。每個A
可能有許多相關B
s。每個B
只與一個A
相關聯。我代表如下與Hibernate這樣的關係:Hibernate映射OneToMany關係的方式
@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_B
有2列:AId
和BId
。AId
和BId
屬於主鍵。並且由於存在從A
到B
的關聯(即,一個A
可能具有許多關聯的B
,並且一個B
與恰好一個關聯A
),所以在BId
上添加了唯一約束。 - 表
B
帶有列,包括BA
這是foreign
關鍵參照列AId
表A
。
關於join table
,
- 爲什麼Hibernate的映射關係
OneToMany
這種方式? - 它可以簡單地將主鍵定義爲由一列組成(
BId
),並且將執行相同的規則。 - 是否有這樣的映射完成的原因?
- 這種映射的優點/缺點是什麼?
我確切我正在使用Hibernate 4.1.6.Final
。
用Hibernate創建表格不是好習慣。 – kapand
我從來沒有爲一對多關係使用聯合列。你應該規範你的數據庫表。 – erencan