使用Hibernate实现事务注释的功能

时间:2013-07-20 10:59:29

标签: hibernate transactions ejb-3.0

我在非EJB环境中使用Hibernate。我知道在使用EJB时​​有几个Transation Annotations。但Hibernate Documentation似乎并未讨论所有这些情况。我想知道的是运行代码时

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注释相同的功能?

1 个答案:

答案 0 :(得分:2)

The javadoc of beginTransaction()说:

  

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

the javadoc of commit()说:

  

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

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