Jpa / Hibernate部分回滚问题

时间:2017-11-07 14:45:59

标签: java hibernate jpa java-ee jta

这是我的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();
            }

        }

    }

}

0 个答案:

没有答案