2015-01-08 3 views
1

Я новичок в спящем режиме. Пожалуйста, дайте мне знать, что не так в приведенном ниже коде?hibernate begintransaction throwing exception

f1() 
{ 
    try { 
     s = HibernateUtils.getSessionFactory().getCurrentSession(); 
     tx = s.beginTransaction(); 
     // do some task 
     tx.commit(); 
    } catch(Exception e) { 
     tx.rollback(); 
     throw e; 
    } 
} 

f2() 
{ 
    try { 
     s = HibernateUtils.getSessionFactory().getCurrentSession(); 
     tx = s.beginTransaction(); 
     f1(); 
     tx.commit(); 
    } catch(Exception e) { 
     tx.rollback(); 
    } 
} 

Начальный оператор транзакции в случае исключения f1(). Заранее спасибо.

+0

Какое исключение .. ??/ –

+0

Вложенные транзакции не поддерживаются. – Varun

+0

Получил это решение, создав новый сеанс, вызвав openSession(), а не используя текущий сеанс. В любом случае спасибо. – Varun

ответ

0

У вас не может быть более одного transaction (not session) активных в то же время, ваш метод уже находится на транзакции, и вам не нужно создавать новый; удалить s.beginTransaction();

ИЛИ может пройти такой же transaction, либо создать новый.

Концепция здесь - getCurrentSession() return same, и вы звоните beginTransaction() дважды.

+0

Но могут быть случаи, когда f1() может быть вызван/вызван напрямую, скажем, из переднего конца или из другой функции, скажем, f3(), которая не имеет beginTransaction(). Как мы имеем дело с этими случаями? – Varun

+0

@ Varun вам может потребоваться выполнить другую транзакцию или передать ее. –

+0

Я думаю, что получил. Благодарю. – Varun