Possible Duplicate:
Hibernate: different object with the same identifier value was already associated with the session
I have got almost the same problem like that user.
In my situation I load one entity from db, I convert this entity into a DataTransferObject, then I want to edit one attribute, after that I convert it back into an entityObject, then I update that entity and hibernate throws following error:
Hibernate Error: org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session
Apparently, the problem is that the object I retrieve from db has the same id as the one I want to update (like it should be) BUT those are not the same objects!
How to manage that? Thank you for help...
Your problem is that the object you previously loaded still exists in your hibernate session. I see two ways to cope with that.
1.) tell the hibernate session to merge your modified object with the one in the session
session.merge(object)
2.) kick the old object out of the session before writing the updated object to the session. session.clear() might work.
This is a very common problem with Hibernate. Even if you delete it from the session, the object will stay in Hibernate PersistanceContext and you will have the same problem. The problem is also coming from the fact that session.contains uses object equality, and not equals()
to compare the object...
The story is the following: you have object A and object B,which are the same logical object, but two different objects in your java heap. and you have long time ago did something with object A in the session.
Now if you do session.delete(B)
you will get the exception, because you are trying to delete an object which has the same primary key as A, but is not A.
The solution is simple:
Object findAAgain=session.merge(B);
session.delete(findAAgain);
the merge returns the instance of the object you have in the session first.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With