Forse una domanda stupida, ma è necessario effettuare un rollback su una transazione nel catch-block se EntityManager.merge() genera un'eccezione? Oppure l'eccezione stessa significa che l'unione non funzionerà in modo che la prossima volta che eseguo il commit le modifiche precedenti che hanno generato l'eccezione non si applicano?È necessario effettuare un rollback su una transazione nel catch-block?
Esempio:
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();
}
}
Ma allora si potrebbe dire che non fa male avere il rollback nel blocco catch? Ho ragione? – Rox
@Rox Non solo non fa male, potrebbe essere necessario se si desidera evitare alcuni effetti indesiderati. –