我有一个课程文件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手动抛出并捕获在同一位置,则不会发生此问题。
答案 0 :(得分:0)
实际上不是因为将Hibernate 3升级到Hibernate 5而已,而是关于事务管理器的。在此之前,我使用的是WebSphereUowTransactionManager
,在遇到异常后,该东西每次都会自动创建新交易。
当我来到Jboss环境时,我正在使用JTATransactionManager
,不确定为什么即使有事务被捕获,该经理为什么仍将使用现有事务。
我要做的是将GlobalRollbackOnParticipationFailure
更改为false。