1

我在非 EJB 环境中使用 Hibernate。我知道在使用 EJB 时有几个Transation Annotation 。但是Hibernate 文档似乎并没有讨论所有这些场景。我想知道的是在运行代码时

try {
    factory.getCurrentSession().beginTransaction();

    // Do some work
    factory.getCurrentSession().load(...);
    factory.getCurrentSession().persist(...);

    factory.getCurrentSession().getTransaction().commit();
}
catch (RuntimeException e) {
    factory.getCurrentSession().getTransaction().rollback();
    throw e; // or display error message
}

已经有一个事务正在运行会发生什么?(将创建一个新事务还是使用现有事务。如果是后者,我如何实现前者,反之亦然?)我怎样才能实现与使用 Hibernate 的不同 EJB 注释?

4

1 回答 1

2

的 javadocbeginTransaction()说:

开始一个工作单元并返回关联的 Transaction 对象。如果需要新的基础交易,请开始交易。否则在现有基础交易的上下文中继续新工作。

并且javadoccommit()说:

当且仅当底层事务由该对象启动时,此方法才会提交底层事务。

也就是说,在代码中显式地管理事务和异常是一件痛苦的事情,并且会降低代码的可读性。我会在非 EJB 环境中使用 Spring 来解决这个问题。

于 2013-07-20T11:12:41.997 回答