Hibernateを使っていて、NonUniqueObjectExceptionっていうのが発生しました。
NonUniqueObjectExceptionとは
Hibernateを使っていて発生したエラーは次の通りです。
1 2 3 4 5 6 7 8 9 10 11 |
org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [xxxx] at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:180) at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:136) at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:204) at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:55) at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:189) at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:49) at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90) at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:670) at org.hibernate.internal.SessionImpl.save(SessionImpl.java:662) at org.hibernate.internal.SessionImpl.save(SessionImpl.java:658) |
これは、すでに永続化オブジェクトがセッション中にロードされている状態で、更にUpdateしようとすると発生する例外です。
NonUniqueObjectExceptionなので、ユニークではないっていうエラーですね。
・https://stackoverrun.com/ja/q/7128352
NonUniqueObjectExceptionの解決策
以下のコードを書くと解決した。
1 2 3 |
session.flush(); session.beginTransaction().commit(); session.clear(); |
コメント