Нужно ли делать откат транзакции в блоке catch?

Может глупый вопрос, но нужно ли делать откат по транзакции в блоке catch, если EntityManager.merge() выдает исключение? Или само исключение означает, что слияние не будет работать, поэтому в следующий раз, когда я запущу коммит, предыдущие изменения, вызвавшие исключение, не будут применяться?

Пример:

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();
     }
}
5
задан Rox 18 April 2012 в 08:14
поделиться