2009-12-02 75 views
1

當使用hibernate時,如果我有一個包含B的嵌入式集合的實體A,則會得到一個ConcurrentModificationException,其中B的每個元素都包含一個字符串集合。換句話說,A是一個實體類,B是一個可嵌入的類。 A有一個B的集合。每個B都有它自己的字符串集合。嵌入式集合包含集合時未解決的hibernate錯誤的解決方法?

這似乎是一個已知的bug休眠(HHH-4313),在http://opensource.atlassian.com/projects/hibernate/browse/HHH-4313

不幸的是,我所描述的,錯誤的優先級低,而且因爲它是在3月29日提交的背部一直沒有得到解決的07.所以我沒有很高的期望,它會很快解決。但是,如果不將B轉換爲實體類,我一直無法找到解決方法,我真的不想這樣做。

有沒有人找到了解決這個特定錯誤的解決方法?

回答

0

這裏的「bug」是ConcurrentModificationException被拋出,而不是更優美的事實 - 而不是事實上,元素集合不支持嵌入式集合。

後者是一個設計考慮因素,我不會屏住呼吸等待它得到修復;最有可能在下一個主要版本(我認爲主要版本)發佈之前不會發生 - 或者全部都是。

潛在的問題是元素的集合不會對單個元素本身可識別的任何限制施加任何限制;因此沒有明確的方法可以將嵌入式收藏中的關聯映射到父項。有些情況下可能會出現這種情況(列表/集合具有明確定義的業務關鍵字),但最終爲了實現這一點,您可能會考慮將實體語義引入到集合元素,而實際上並未將它們變爲實體,這似乎毫無意義。

解決方法很簡單 - 使您的B成爲一個真正的實體。您可以使用all-delete-orphan級聯樣式非常維護類似收集元素的生命週期,並且您將可以享受嵌入式集合以啓動。