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并且由于从Ato存在关联B(即,一个A可能有许多关联B的 s,而一个B与恰好一个关联A),因此在 上添加了唯一约束BId。- 包含列的表
B,包括BA哪个是 table 的关键foreign引用列。AIdA
关于join table,
- 为什么 Hibernate 以
OneToMany这种方式映射关系? - 它可以简单地将主键定义为由一列 (
BId) 组成,并且将执行相同的规则。 - 以这种方式完成映射是否有原因?
- 这种映射的优点/缺点是什么?
我准确地说我正在使用Hibernate 4.1.6.Final.