При работе с программными транзакциями в Hibernate необходимо ли явно вызывать откат при возникновении исключения, или среда позаботится о вызове отката при наличии необработанного исключения? Код ниже выглядит как безопасный подход (хотя и некрасивый код) для обеспечения отката, но мне интересно, есть ли более элегантный способ кодирования этого, мысли?
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(); }