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

hibernate exception "Found shared references to a collection" (Reprint)

2022-03-18 03:27:01

問題です。



親クラスにSonを保持するSetプロパティがあるとします。 クエリー Parentからquot;すると、ある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 では許可されません。 ハイバーネート 2つのエンティティは、同じコレクションインスタンスへの参照を共有してはならない」の第6章を参照してください。



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



方法 解く :newP.setSonSet(null)です。