2012-09-26 48 views
0

我有一個像休眠全刪除,孤兒有序集合

<set name="someBeans" table="sometable" cascade="all, delete-orphan" inverse="true" lazy="true"> 
     <key column="some_id" /> 
     <one-to-many class="someBean" /> 
    </set> 

的關係在我的Java代碼中有關於這裏面就像

執行一套
myClass.setSomeBeans(SomeBeans); 

現在這個SomeBeans是linkedHashmap,所以訂單被保留,但因爲所有刪除孤兒正在使用級聯我在特定情況下得到例外,如下所示:

HibernateException – A collection with cascade=」all-delete-orphan」 was no longer referenced by the owning entity instance 

所以我改變以上

myClass.getSomeBeans().clear(); 
myClass.getSomeBeans().addAll(SomeBeans) 

但是這樣做我不能夠從LinkedHashMap的SomeBeans維持秩序的Java實現。

有沒有人遇到這樣的問題,也是在這方面的任何幫助將appriciated

問候,

Vaibhav的

+0

當Hibernate從數據庫加載集合時,它不會使用LinkedHashSet,因此順序是任意的。你爲什麼要在這種特殊情況下保存它?依賴於由Hibernate維護的集合中的插入順序沒有多大意義。 –

+0

訂單存儲在一個不同的表中,所以我需要將該訂單應用於SomeBeans,然後在我的java代碼中執行SetSomeBeans(),該代碼開始給出上述異常,我嘗試了clear()方法,然後addAll ),hibernate不會保留順序,因此解決方案與SomeBeans的順序混亂。 – vaibhav

+1

你還沒有明白。比方說,Hibernate按照原樣進行設置,並保持關聯。現在開始一個新的事務,並從數據庫重新加載實體及其集合。 Hibernate不會奇蹟般地保存集合中bean的順序。它將創建一個無序的非鏈接集合,並且這些實體的順序將是任意的。所以依靠實體的插入順序是愚蠢的。 –

回答

0

只是爲了完成我想我創建了一個虛擬對象複製屬性從hibernate對象中提取出來,並對其應用排序,並保留了所有刪除孤立相關的問題。