想知道保存一個通常包含Child對象集合(在我的情況下爲多對多)的Parent的最佳做法,但Parent中的集合當前設置爲null,因爲它尚未加載?保存父對象的最佳方法
在我的情況下,父從網頁傳遞到我的服務層。該網頁僅從表單填充了Parent的簡單屬性。
我知道有幾個Child對象鏈接到數據庫中的Parent,但'children'屬性當前爲null。
如果我保存Parent,即使my的Children被設置爲cascade =「none」,當我保存Parent時,所有鏈接都會被刪除(我甚至可以看到NHibernate在日誌中發出的刪除語句)。
我能想到的幾種方法來解決這個問題:
1)seperately裝入孩子,然後父項的子集設置給他們,然後保存父(作品但這是一個額外的訪問數據庫) 。
2)僅使用HQL或Native SQL發佈簡單屬性的更新。
更新:我不確定我的級聯行爲實際上是否正常工作。從文檔,它建議NHibernate不會混亂我的收藏,除非級聯設置爲save-update,all-delete-orphan等。但這是我的映射
(來自Order.hbm.xml)
<bag name="OrderItems" table="order_item" cascade="none" lazy="true">
<key column ="order_id" />
<many-to-many class="MenuItem" column="item_id"/>
</bag>
當Order.OrderItems爲空,並且使用SaveOrUpdate(Order)保存我的Order對象時,它會明確地刪除集合。我希望他們得到保護。我的配置是錯誤的還是什麼?
謝謝
感謝您的回覆。我確實認爲,儘管說實話我只想擁有一套我認爲的域對象。我曾參與過大型項目(Java),其中維護DTO已成爲維護(保持與實體同步)的噩夢。目前,我已經使用HQL更新「查詢」解決了我的問題,該查詢只觸及了我當時關心的對象。雖然我確定NHibernate中必須有一個標誌來做我想做的事情,但它仍然很整潔。再次感謝 – Richard
那麼在任何地方使用DTO當然不是強制性的,而是在最有意義的地方使用DTO。 –