我試圖做一個完整的CRUD使用分離對象的集合(即他們創建時沒有使用休眠,並沒有與會話相關聯)。獨立收集更新問題
項目的ID是用戶定義的(未生成)。
集合包含數據庫中已存在的條目和數據庫中不存在的條目。
現有條目應該更新,應插入新條目。
任何存在於數據庫中但不在集合中的條目應該被刪除。
到目前爲止,我一直在試圖從數據庫中刪除所有條目,然後再對集合中的每個項目執行saveOrUpdate:
for (Object entity : session.createCriteria(type).list())
session.delete(entity);
for (Object entity : collection)
session.saveOrUpdate(entity);
然而,這導致錯誤
一具有相同的不同對象 標識符值已經與會話相關的
我以爲這是因爲刪除循環加載了一個對象到會話中,然後我試圖保存一個具有相同ID的不同對象,所以我更改了代碼,以便我驅逐每個刪除實體:
for (Object entity : session.createCriteria(type).list())
{
session.delete(entity);
session.evict(entity);
}
for (Object entity : collection)
session.saveOrUpdate(entity);
,現在我越來越
org.hibernate.AssertionFailure我: 可能nonthreadsafe訪問 會話
什麼是最exhaustiv執行這種操作的方法。
注意:我需要這樣的事情發生在一個事務在任何情況下都不起作用我不希望數據加載有任何影響。
謝謝。
這可能也有幫助:http://stackoverflow.com/questions/1667481/compare-two-lists-for-updates-deletions-and-additions – Pablojim 2011-01-21 13:04:05