JPA EntityManager Merge vs Persist
source link: https://lorenzo-dee.blogspot.com/2015/12/jpa-entitymanager-merge-vs-persist.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Here's a quick short post. Putting it here, since it has been tremendously useful for me. I hope this will help others as well.
There have been several questions on SO about merge()
and persist()
operations. But I find that it is not just about one resulting to an UPDATE
SQL command, and the other resulting to an INSERT
SQL command.
Results of merge()
and persist()
Instead of pasting relevant sections from the JPA 2.1 specification in this post, I've created a summary table of the results of the said operations. This is based on sections 3.2.2 (Persisting an Entity Instance) and 3.2.7.1 (Merging Detached Entity State) of the JPA 2.1 specification.
Operation State Result
persist new becomes managed
persist managed ignored (but cascaded)
persist removed becomes managed
persist detached throws exception or commit fails
Operation State Result
merge new becomes managed
merge managed ignored (but cascaded)
merge removed throws exception or commit fails
merge detached becomes managed
As you can see, both merge()
and persist()
operations treat new and managed entities the same way. But they only differ in the way they treat removed and detached entities.
Closing Thoughts
So, the next time you think that persist()
results to an INSERT
, and merge()
results to an UPDATE
, think again!
Here's my take. I personally prefer to use merge()
operation to handle new, managed, and detached entities.
But for removed entities (which can only happen when you programmatically remove it), I use persist()
. But then again, it's rare (in my experience) to remove an entity, and then reverse its removal in the same persistence context.
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK