2

と の 2 つのオブジェクトがUserありResumeます。履歴書にはUser userフィールドがあります。私のコードでは、まずuserオブジェクトを取得し、それにいくつかの変更を加えます。が存在する場合はResume.findByUser(user)、履歴書を取得し、そこでもいくつかの変更を行います。
を呼び出しuser.save()resume.save()、セッション内に同じオブジェクトへの別の参照があるという例外が発生した場合、merge().

データを呼び出すuser.merge()と保存されますが、呼び出すresume.merge()と次の例外が発生します。
org.springframework.dao.DuplicateKeyException: a different object with the same identifier value was already associated with the session: [com.wizard.security.User#36]; nested exception is org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.wizard.security.User#36]

どうしたらいいのかわからない。resume.userと同じオブジェクトを参照するオブジェクトに問題があるようuserです。

この問題についてお役に立てれば幸いです。ありがとうございます。

4

1 に答える 1

5

GORM は hibernate 上に構築されているため、resumeで merge を呼び出すと、フィールドuserにカスケードされます。

1 つのトランザクション内で user.merge() を呼び出してから resume.merge() を呼び出すと、resume.merge() を呼び出すまでに、DB のユーザー フィールドは、再開インスタンスで保持されているバージョンよりも新しいバージョンになります。

変更やマージを行う前に、resume.user.refresh() または resume.refresh() を呼び出すことをお勧めします。

于 2013-04-19T10:16:30.610 に答える