Управление транзакциями с помощью аннотаций
От: Аноним  
Дата: 17.02.12 10:08
Оценка:
Используется Spring+hibernate

Как использовать @Transactional вообщем знаю, вешаем на метод бина @Transactional и спринг оборачивает метод в транзакцию.

как указать что нужно создать новую сессию, чтобы в рамках одного метода организовать child транзакции, использую HibernateTransactionManager? Пробывал REQUIRES_NEW, REQUIRES_CHILD вешать и на do() и на doInInnerTransaction(), но commit/rollback в doInInnerTransaction, закрывает внешнюю транзакцию, т.е. лок скидывается..

Сейчас делаю так:

public void do() {
    Session session = null;
    Transaction transaction = null;
    try {
           session = sessionFactory.openSession();
           transaction = session.beginTransaction();
           session.createSQLQuery("select ... from some_table where id = ? for update nowait");

           try {
                  doInInnerTransaction(); 
           } catch(DataAccessException ex) {
                // exception
           }
    } finally() {
           transaction.rollback();
           session.close();
    }
}

@Transactional
public void doInInnerTransaction() {
    // do some actions with db
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.