在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(); }
答案 0 :(得分:0)
如何使用Declarative Transaction Demarcation?
默认情况下,所有RuntimeExceptions都会导致回滚,但您可以将其调整为对所有异常进行回滚。
AFAIK你必须知道一些陷阱,例如:你不能用@Transactional
注释所有内容,只能用bean的类或公共方法注释。