Используется 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
}