對於這個我很想念一個簡單的答案。我見過很多如何在簡單的父/子關係中執行此操作的示例,但我不確定在有第三個表時如何執行此操作。我對NHibernate也是比較新的,所以請和我一起裸照。NHibernate - 當引用對象被刪除時將外鍵設置爲空
我有一個PhoneBook類,它有一個PhoneNumber列表。然後我有另一個引用PhoneNumber的類「Account」。這個參考是可以爲空的,所以一個賬戶不必有一個電話號碼。
我希望能夠保存電話本,讓它保存/更新/刪除所有的電話號碼,如果有任何電話號碼被刪除,我想用這個號碼將任何賬號歸零。除了最後一部分,一切都在運轉;如果我刪除了一個正在使用的電話號碼,它也會刪除該帳號,我不想發生這種情況,我只是希望它清除它的參考。我確信這只是因爲我的級聯或映射是錯誤的,我只是不知道要設置它們。
要保存的實際代碼相對簡單。順便說一句,如果有人可以告訴我爲什麼我必須合併,以確保電話號碼被刪除,這將是真棒。
var session = SessionFactory.GetCurrentSession();
book = (PhoneBookDto) session.Merge(book);
session.SaveOrUpdate(book);
目前有關的映射:
PhoneBook.hbm.xml
...
<bag cascade="all-delete-orphan" inverse="true" name="PhoneNumbers">
<key>
<column name="phone_book_id" />
</key>
<one-to-many class="DataLibrary.dto.PhoneNumberDto, DataLibrary" />
</bag>
...
PhoneNumber.hbm.xml
...
<many-to-one cascade="none" class="DataLibrary.dto.PhoneBookDto, DataLibrary" name="PhoneBook">
<column name="phone_book_id" />
</many-to-one>
...
Account.hbm.xml
...
<many-to-one cascade="none" class="DataLibrary.dto.PhoneNumberDto, DataLibrary" name="PhoneNumber">
<column name="phone_number_id" />
</many-to-one>
...
提前致謝!
編輯:
FIRO我指出了正確的方向,我不得不設立******中國收集回賬戶,即使我並不真的需要它,而且還要把它設置爲inverse =假:
<bag cascade="none" inverse="false" name="Accounts">
<key>
<column name="phone_number_id" />
</key>
<one-to-many class="DataLibrary.dto.AccountDto, DataLibrary" />
</bag>
當我這樣做,它的工作。有沒有辦法做到這一點,所以我不必有PhoneNumber帳戶關聯?
你有賬戶的******中國收藏與Cascade.remove? – Firo 2012-03-14 16:43:45