这是我的Java Bean的解压缩代码,我使用Jpa / Hibernate堆栈。
我想通过抛出IllegalArgumentException来手动强制回滚我的事务。
当我控制数据库中的数据时,我发现容器只执行部分回滚: - 更新语句被回滚(第26行) - insert语句不会回滚(第30行)
我的代码有什么问题?我必须做什么才能回滚整个交易?
提前致谢。
import org.hibernate.FlushMode;
import org.hibernate.Session;
import org.hibernate.Transaction;
@Stateless
public class MyBean {
@PersistenceContext(unitName="mydatasource")
protected EntityManager em;
public void save() {
Session session = em.unwrap(Session.class);
session.setFlushMode(FlushMode.MANUAL);
Transaction transaction = session.beginTransaction();
try {
...
em.merge(anExistingObject);
...
em.persist(aNewObject);
throw new IllegalArgumentException();
transaction.commit();
} catch (Exception ex) {
transaction.rollback();
} finally {
if (session!=null) {
session.flush();
session.close();
}
}
}
}