2012-03-07 10 views
0

私は1対多の関係にある2つのクラス 'メソッド'と 'BackendMethod'を持っています。 BackentMethod.javaの 'メソッド'のセットでmappedByアノテーションを使用しました。Hibernateで参照をコピーするには?

私はmethodCopyというインスタンスmethodOriginalのコピーを作成し、それを永続化しました。 methodOriginalによって参照されるすべてのBackendMethodをmethodCopyによって参照されるようにしたいと思います。

私はそれらをコピーしたくないです。新しい「方法」に再度割り当ててください。

HibernateExceptionで:コレクションがわかっ参照の共有:

をMethod.backendMethoden私はHibernateExceptionでの取得

methodCopy.setBackendMethoden(methodOriginal.getBackendMethoden())); 

:私はちょうどこのようにそれらに割り当て

このようにセット全体をコピーすると、

methodCopy.setBackendMethoden(new HashSet<Backend>(methodOriginal.getBackendMethoden()))); 
methodCopy.persist(); 

その後、セットはnullになります。

私は間違っていますか?

+0

以下の回答を試しましたか?私は彼らに対するコメントや受け入れを見なかった。お元気です。 – ManuPK

答えて

1

私はそれらをコピーしたくないので、もう一度新しい「方法」に割り当ててください。

これは機能しません。メソッドとbackendMethodとの関係をoneToManyとして定義しているからです。つまり、1つのBackendMethodエンティティは、1つのメソッド(元の)エンティティによってのみ参照できます。 MethodCopyのbackendMethodsの同じセットが必要な場合。新しいbackendMethodオブジェクトのセットが必要です。この場合、それらのバックエンドメソッドエンティティはデータベースに複製されます(もちろん、異なるPKを使用します)。

また、関係をmanytomanyに変更します。

0

hibernateで参照をコピーするときは、必ずにid値とrelationsship値をnullに設定してください。ここでだから、私は通常何

である、あなたはmethodOriginal.getBackendMethoden()を反復して参照してnullidsを設定し、methodCopyに設定する必要があります。

また、methodCopyのsとidの値がnullであることを確認してください。

これは新しいオブジェクトとして扱われ、永続化されます。

関連する問題