我有一些交易代码:
import org.hibernate.Session;
void PersistRemovePersist(){
try {
UserTransaction ut = getUt();
EntityManagerFactory emf = getEmf();
A = new some.Entity("A");
ut.begin();
EntityManager em = emf.createEntityManager();
Session ss = em.unwrap(Session.class);
saveOrUpdate(A);
ut.commit();
em.close();
ut.begin(); //TX1
EntityManager em = emf.createEntityManager();
Person a = em.find(Person.class,db.A.getId());
em.remove(a);
ut.commit();
em.close();
ut.begin(); //TX2
em = emf.createEntityManager();
em.unwrap(Session.class).saveOrUpdate(A);
ut.commit(); // <- wrapped StaleObjectStateException
em.close();
}catch (Exception e){
throw new RuntimeException(e);
}
}
在代码执行时,我得到一个异常:
org.hibernate.StaleObjectStateException:行已被另一个事务更新或删除(或未保存的值映射不正确):[some.Entity#1]
但为什么?TX1 和 TX2 是串行的,而不是并行的。我错过了什么?