我将我的应用程序从Spring3升级到Spring4。在我现有的应用程序中,我们使用OpenSessionInViewInterceptor
来创建事务和新请求。
现在,我也在使用JPA,因此即使我使用OpenEntityManagerInViewInterceptor
也不会将事务与之关联。因此,我不得不在所有控制器方法中手动添加事务。
由于遗留代码,控制器类具有大量业务逻辑,而不是将其正确分配到服务层。
现在,如果我在控制器方法上放置@Transctional
批注,则它不起作用,而如果我通过DefaultTransactionDefinition
使用手动交易,则它可以正常工作。
另外,如果我将控制器方法的业务逻辑删除到服务层,并将@Transactional
批注放入服务层,那么它也可以正常工作。但是这些更改是乏味的,并且我的应用程序很大,所以无法做到。
请告诉我为什么@Transactional
在我的情况下不起作用,如果将它放在控制器中,应该如何使它起作用。
我没有使用AspectJ进行事务管理。
尝试的方法: