1. ホーム
  2. ハイバーネート

hibernate exception "Found shared references to the collection" (コレクションへの共有参照が見つかりました。

2022-03-20 13:55:33
問題あり。



ParentクラスがSonを内部に持つSetプロパティを持っていると仮定し、"from Parent"のクエリで、あるParentがSonを一つも持っていない場合、Setプロパティはnullではなく、空の集合になります。



この時点で、Parent newP=new Parent(); とし、BeanUtils.copyPropertis(newP,origP); とすると、Hibernate 例外 "Found shared references to a collection" が発生します。



注:hibernate はどの時点で "2つのオブジェクトがコレクションを共有するケースを見つけるのでしょうか?私の側の例では、次のクエリで発見されました。







理由



BeanUtils.copyPropert は浅いコピーであるため、2 つのオブジェクトが同じセットを参照することになりますが、これは hibernate では許可されていません。Hibernate リファレンス第 6 章 "Two entities may not share a reference to the same collection instance" を参照してください。



この問題は、オブジェクトをコピーするときによく発生します。



解決方法:newP.setSonSet(null);



また、同時進行のオペレーションが原因ではないかという意見もあります:http://www.blogjava.net/fastzch/archive/2006/12/22/89520.html。