JPA: check whether an entity object has been persisted or not

Dreamer picture Dreamer · Apr 18, 2013 · Viewed 15.9k times · Source

Is there a general method that can

 if(entity is persisted before){
     entity = entity.merge();
 }else{
     entity.persist();
 }

So the method contain above logic is safe everywhere?

Answer

IgorMadjeric picture IgorMadjeric · Apr 18, 2013

If you need to know is object already in persistence context you should use contains method of EntityManager.

Only EntityManager can tell you is entity persisted or not, entity does not have such information.

Here you can check javadoc for contains method.

if (!em.contains(entity)) {
  em.persist(entity);
} else {
  em.merge(entity);
}