org.hibernate.HibernateException: текущая транзакция не выполняется после перехода на Hibernate 5 - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть файл класса, CBRTask.java

В этом CBRTask.java у меня есть следующий код:

@Autowired
private CbrService cbrService;

public CBRPayment execute() {

   try {
        cbrService.sendCR( this.entity );
        // If I manually throw Exception here, no problem in catch
   catch (Exception exception) {
   // do something to call db, but hit error
   }
}

А затем в моем CbrService классе :

Я выкидываю исключение

throw new Exception();

Тогда это будет зафиксировано в CBRTask.java, а затем вызовет ошибку обращения к db.

Предположим, что это не должно произойти.Потому что этот код работает нормально в Hibernate 3. После перехода на Hibernate 5, только нажмите.

Вот журнал ошибок:

org.hibernate.HibernateException: Current transaction is not in progress
    at org.hibernate.context.internal.JTASessionContext.currentSession(JTASessionContext.java:81)
    at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:721)

И если я вручную выбрасываю исключение вКласс CBRPayment, и ловите в одном месте, проблема не произойдет.

1 Ответ

0 голосов
/ 01 октября 2018

Это на самом деле не из-за обновления Hibernate 3 до Hibernate 5. Но это касается менеджера транзакций.До этого я использовал WebSphereUowTransactionManager, где эта вещь будет автоматически создавать новую транзакцию каждый раз после перехвата исключения.

Когда я прихожу в среду Jboss, я использую JTATransactionManager, не знаю, почему этот менеджер будетиспользуя обратно существующую транзакцию даже при обнаружении транзакции.

Что я делаю, замените GlobalRollbackOnParticipationFailure на false.

...