Quizás una pregunta estúpida, pero ¿es necesario realizar una reversión de una transacción en el catch-block si EntityManager.merge() arroja una excepción? ¿O la propia excepción significa que la fusión no funcionará para que la próxima vez que ejecute los cambios previos que arrojó la excepción no se aplique?¿Es necesario realizar una reversión de una transacción en el bloque catch?
Ejemplo:
public void setPerson(Person person) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("MyLib");
EntityManager em = emf.createEntityManager();
try {
if(!em.getTransaction().isActive()){
em.getTransaction().begin();
}
em.merge(person);
em.getTransaction().commit();
emf.getCache().evict(Person.class); // clear Person cache
} catch (Exception ex){
em.getTransaction().rollback(); // Is this necessary?
} finally {
em.close();
}
}
Pero entonces ¿podría decir que no le hace daño tener la reversión en el bloque catch? ¿Estoy en lo cierto? – Rox
@Rox No solo no duele, puede ser necesario si desea evitar algunos efectos no deseados. –