当未处理的异常发生时,Hibernate会自动回滚编程事务吗?

时间:2010-01-22 19:14:23

标签: hibernate transactions

在Hibernate中使用程序化事务时,是否有必要在发生异常时显式调用rollback,或者如果存在未处理的异常,框架是否会负责调用回滚?下面的代码似乎是安全方法(尽管是丑陋的代码)来确保回滚,但我想知道是否有一种更优雅的编码方式,想法?

ApplicationContext ac = new ClassPathXmlApplicationContext("hibernate-config.xml");
SessionFactory factory = (SessionFactory) ac.getBean("sessionFactory");
Session session = factory.getCurrentSession();

Transaction txn = null;
try
{
    txn = session.beginTransaction();

    // <insert transaction work here>

    txn.commit();
}
catch(Exception e)
{
    try {txn.rollback(); }
    catch (Exception eAny) {  }
    throw(e);
}
finally { session.close(); }

1 个答案:

答案 0 :(得分:0)

如何使用Declarative Transaction Demarcation

默认情况下,所有RuntimeExceptions都会导致回滚,但您可以将其调整为对所有异常进行回滚。

AFAIK你必须知道一些陷阱,例如:你不能用@Transactional注释所有内容,只能用bean的类或公共方法注释。