2011-09-19 119 views
4

我想澄清一個假設,我已經做了關於Hibernate的功能。假設我有一個類A@OneToManyB的映射。這些B的每一個都具有A家長參考,以支持A.休眠 - 從集合中刪除項目

一個mappedBy屬性當我在A從集合中刪除B,不冬眠有能力的B內自動空出父字段?從我完成的所有測試中,當從集合中刪除某些東西時,它並不通過更改子項中的父引用來實際更新數據庫。

This link似乎支持我的說法,因爲他們手動清空父引用,並將其從父級Set中刪除。

回答

6

無論何時從兩端映射關聯,其中一個端點被指定爲活動端點,一個被動端點。 (被動端是一個使用mappedBy=inverse="true"映射)

Hibernate並不,並且當活性端被改變不能,更新的集合的被動端,因爲它只能在沖洗時間檢測這樣的變化。因此,調用代碼修改關聯的兩端是確保對象模型始終處於一致狀態的良好習慣。

Hibernate本身並不關心關聯的兩端是否一致,因爲它只在沖刷到數據庫時查看活動端。

當映射一對多關聯時,一對多結束應該被指定爲被動。您鏈接的hibernate手冊部分試圖解釋原因。