Może to głupie pytanie, ale czy konieczne jest wycofanie transakcji w bloku catch, jeśli EntityManager.merge() zgłasza wyjątek? A może sam wyjątek oznacza, że scalanie nie zadziała, aby następnym razem uruchomić, zatwierdzić poprzednie zmiany, które spowodowały wyjątek, który nie będzie stosowany?Czy konieczne jest wycofanie transakcji w bloku catch?
Przykład:
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();
}
}
Ale czy można powiedzieć, że nie zaszkodzi mieć wycofanie w bloku catch? Czy mam rację? – Rox
@Rox Nie tylko nie boli, może być konieczne, jeśli chcesz uniknąć niepożądanych efektów. –