org.hibernate.HibernateException:迁移到Hibernate 5后,当前事务未在进行中

时间:2018-09-21 03:47:07

标签: java hibernate exception transactional hibernate-session

我有一个课程文件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,然后导致数据库调用命中错误。

假设它不应该发生。因为这段代码在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类中的Exception手动抛出并捕获在同一位置,则不会发生此问题。

1 个答案:

答案 0 :(得分:0)

实际上不是因为将Hibernate 3升级到Hibernate 5而已,而是关于事务管理器的。在此之前,我使用的是WebSphereUowTransactionManager,在遇到异常后,该东西每次都会自动创建新交易。

当我来到Jboss环境时,我正在使用JTATransactionManager,不确定为什么即使有事务被捕获,该经理为什么仍将使用现有事务。

我要做的是将GlobalRollbackOnParticipationFailure更改为false。