2012-07-22 78 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只關心所有者方面。如果您沒有初始化所有者方,則認爲該關聯不存在。除非你真的知道你在做什麼,否則一個好的經驗法則是初始化關聯的兩個方面,以使你的圖形具有一致性。