Difference between save and saveOrUpdate in Hibernate The main difference between save and saveOrUpdate method is that save() generates a new identifier and INSERT record into the database while saveOrUpdate can either INSERT or UPDATE based upon the existence of a record.
The main difference between them is that save() is Hibernate-proprietary, whereas persist() is a standard JPA method. Additionally, save() is guaranteed to assign and return an ID for the entity, whereas persist() is not. update() is used to attach a detached entity to the session.
Once save/update is done, the object DOES NOT reflect the change. The returned object reflects the changes, and it is attached to hibernate session. MERGE method offers greater flexibility when it comes to saving data objects, since you need not worry about attaching object to Session.
Hibernate update should be used where we know that we are only updating the entity information. This operation adds the entity object to persistent context and further changes are tracked and saved when transaction is committed.
Chapter 9 covers all of this better than I can:
http://nhibernate.info/doc/nh/en/index.html
But cliff notes:
Save()
takes a new object without an identifier and attaches it to the session. The object will be INSERT
'd.
Update()
takes an existing object that has an identifier but is not in the session and attaches it to the session. The object will be UPDATE
'd.
SaveOrUpdate()
looks at the identifier and decides what is necessary in the above.
SaveOrUpdateCopy()
is special in that say you have two objects with the same identifier -- one in the session and one not. If you try and update
the one not in the session an exception is thrown normally (you are now trying to attach two objects that represent the same persistent object to the session). SaveOrUpdateCopy()
copies the non-session object state to the session object state.
I'm not sure how you are going to use NH, but for a lot of cases all you need is Save()
. The session is doing ALL of the work necessary to know what has to be updated and simply Flush()
or a Commit()
does everything you need.
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