A
让我们以两个实体和为例B
。每个A
可能有许多关联B
的 s。每个B
都与一个 相关联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;
}
当我从这个映射生成数据库时,这就是我得到的:
- 表
A
。 A_B
具有 2 列的连接表:AId
和BId
。AId
并且BId
属于主键。OneToMany
并且由于从A
to存在关联B
(即,一个A
可能有许多关联B
的 s,而一个B
与恰好一个关联A
),因此在 上添加了唯一约束BId
。- 包含列的表
B
,包括BA
哪个是 table 的关键foreign
引用列。AId
A
关于join table
,
- 为什么 Hibernate 以
OneToMany
这种方式映射关系? - 它可以简单地将主键定义为由一列 (
BId
) 组成,并且将执行相同的规则。 - 以这种方式完成映射是否有原因?
- 这种映射的优点/缺点是什么?
我准确地说我正在使用Hibernate 4.1.6.Final
.