2012-07-22 60 views
1

我是hibernate的新手。请帮助我理解这一点。休眠一对多映射外键问题

我有Department和Employee对象。部门正在采用级联类型SAVE的员工集合。我创建了部门对象和员工对象。分别说明了dept1和emp1。当我保存dept1对象(具有emp1)时,它将dept1和emp1保存在部门和员工表中出外键。

除非我在emp1上设置部门(dept1),否则不会保存外键。为什么我应该手动设置?不能冬眠呢?是否有任何理由这样做?

+1

那么Hibernate应该如何猜测你的代码呢?如果你有两种关系(多对一和一对多),那么设置两种关系会更好。 – 2012-07-22 19:25:41

回答

3

因为这就是Hibernate文档和JPA规范告诉你这样做的原因。在一个双向关联中,有一个所有者方和一个相反方。所有者方是没有mappedBy属性的方。反面是具有mappedBy属性的那一面。

在一个双向OneToMany中,所有者方总是多方(具有foerign键的那一方)。

Hibernate/JPA只关心所有者方面。如果您没有初始化所有者方,则认为该关联不存在。除非你真的知道你在做什么,否则一个好的经验法则是初始化关联的两个方面,以使你的图形具有一致性。