Có lẽ một câu hỏi ngu ngốc, nhưng có cần thiết phải thực hiện một rollback trên một giao dịch trong khối catch nếu EntityManager.merge() ném một ngoại lệ? Hoặc bản thân ngoại lệ có nghĩa là hợp nhất sẽ không hoạt động để lần sau tôi chạy cam kết những thay đổi trước đó đã ném ngoại lệ sẽ không áp dụng?Có cần thiết phải thực hiện khôi phục trên giao dịch trong khối catch không?
Ví dụ:
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();
}
}
Nhưng sau đó bạn có thể nói rằng nó không bị tổn thương để có rollback trong khối catch? Tôi có đúng không? – Rox
@Rox Không chỉ nó không làm tổn thương, nó có thể là cần thiết nếu bạn muốn tránh một số hiệu ứng không mong muốn. –