Site icon akquinet AG – Blog

JPA Pitfalls (14): EntityManager.persist and Transactions

This blog article is part of a “series of blog articles” about common pitfalls using JPA and ways to avoid them. In this article, we describe the result of EntityManager.persist inside and outside of a transaction.

What is the result of EntityManager.persist?

Employee emp = new Employee(...);
em.persist(emp);

Method persist successfully makes the instance managed and persistent, but only inside of an active transaction. When called outside of a transaction the result depends on the type of the EntityManager:

An EntityExistsException indicates that an entity with the same id already exists. The exception may be thrown by method persist or at flush or commit time.

Recommendation: Make sure the persist method is called inside of an transaction.

You can find an example of this pitfall and its solution in the class PersisteOutsideTxExperiment in this project: https://github.com/akquinet/jpapitfalls.git.

Exit mobile version