Включает ли Hibernate автоматический откат программных транзакций при возникновении необработанного исключения? - PullRequest
4 голосов
/ 22 января 2010

При работе с программными транзакциями в 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(); }

1 Ответ

0 голосов
/ 01 марта 2010

Как насчет использования Декларация декларативной транзакции ?

По умолчанию все RuntimeExceptions вызывают откат, но вы можете настроить его на откат для всех исключений.

AFAIK Вы должны знать о некоторых ошибках, например: вы не можете аннотировать все с помощью @Transactional, только классами или публичными методами bean-компонентов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...