愚かな質問かもしれませんが、EntityManager.merge()が例外をスローするとcatchブロック内のトランザクションをロールバックする必要がありますか? または、例外自体がマージがうまくいかないことを意味するので、次に例外がスローされた前回の変更をコミットするときに適用されません。catchブロック内のトランザクションに対してロールバックを行う必要はありますか?
例:
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();
}
}
しかし、キャッチブロックにロールバックされていても痛いとは言えません。私は正しい? – Rox
@Roxそれは傷つけないだけでなく、望ましくない影響を避けたい場合には必要かもしれません。 –