Управление транзакциями - PullRequest
1 голос
/ 14 апреля 2010

В моем коде я обновляю две таблицы, одну за другой.

обновление (table1_details);

обновление (table2_details);

Таким образом, если обновление завершится неудачно в таблице 1, таблица 2 не должна обновляться или должна быть откатлена.

Как справиться с этой ситуацией. Я знаю, что должен использовать транзакцию. Может ли кто-нибудь помочь с кодом !!! Я использую Java с весны и гибернации.

Ответы [ 2 ]

2 голосов
/ 14 апреля 2010

Вопрос немного широк, и есть несколько способов реализовать это, но я бы:

  • Используйте Spring для внедрения Hibernate SessionFactory в объекты DAO.
  • Использование Spring для внедрения DAO в объект службы и вызова их внутри бизнес-метода.
  • Использовать декларативное управление транзакциями Spring на уровне бизнес-методов (либо с помощью Spring AOP, либо @Transactional).

Примерно так:

@Transactional
public void doSomething() {
    dao1.foo();
    dao2.bar();
}

Подробнее о конфигурации см. В Глава 9. Управление транзакциями документации Spring.

0 голосов
/ 14 апреля 2010

Не могу вспомнить правильный API, но что-то вроде этого:

    Transaction tx = em.getTransaction();

    tx.begin();
    try {
        update1(); update2();
    }
    catch(Exception e) {
        failed = true
    }
    finally {
        if( !failed ) tx.commit();
        else tx.rollbacl();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...