Vielleicht eine dumme Frage, aber ist es notwendig, einen Rollback auf eine Transaktion im Catch-Block zu machen, wenn die EntityManager.merge() eine Ausnahme auslöst? Oder bedeutet die Ausnahme selbst, dass die Zusammenführung nicht funktioniert, so dass beim nächsten Ausführen von commit die vorherigen Änderungen, die die Ausnahme ausgelöst haben, nicht zutreffen?Muss ein Rollback für eine Transaktion im Catch-Block durchgeführt werden?
Beispiel:
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();
}
}
Aber dann könnte man sagen, dass es nicht schadet, das Rollback im Catch-Block zu haben? Habe ich recht? – Rox
@Rox Es tut nicht nur nicht weh, es kann notwendig sein, wenn Sie einige unerwünschte Effekte vermeiden wollen. –