【发布时间】:2014-08-24 09:39:51
【问题描述】:
我正在查看Hibernate documentation for bidirectional relationship,在文档中它说:
示例 7.21。双向一对多,多对一作为关联所有者
@Entity
public class Troop {
@OneToMany(mappedBy="troop")
public Set<Soldier> getSoldiers() {
...
}
@Entity
public class Soldier {
@ManyToOne
@JoinColumn(name="troop_fk")
public Troop getTroop() {
...
}
Troop 与 Soldier 具有双向的一对多关系 通过部队财产。您不必(不得)定义任何 mappedBy 端的物理映射。
映射一个双向的一对多,以一对多的边作为 拥有方,您必须删除 mappedBy 元素并设置许多 一个@JoinColumn 作为可插入和可更新为false。这个解决方案 未优化,会产生额外的 UPDATE 语句。
示例 7.22。作为所有者的一对多方的双向关联
@Entity
public class Troop {
@OneToMany
@JoinColumn(name="troop_fk") //we need to duplicate the physical information
public Set<Soldier> getSoldiers() {
...
}
@Entity
public class Soldier {
@ManyToOne
@JoinColumn(name="troop_fk", insertable=false, updatable=false)
public Troop getTroop() {
...
}
由于我是 Hibernate 的新手,我很难理解这一点。
1) 当文档说:
You don't have to (must not) define any physical mapping in the mappedBy side.
2) 7.22 中的 @JoinColumn 与 name 属性具有相同的值 (troop_fk)。我们可以指定不同的值吗?在这里设置insertable=false, updatable=false有什么好处和坏处?
谁能解释一下?
【问题讨论】: