问题现象
1 | javax.persistence.TransactionRequiredException: no transaction is in progress |
示例代码 - Proxy
1 | public class classA { |
问题分析:
如上代码段,由于doB为对象内方法,而Spring事务的开启依赖到AOP(Proxy),在doA方法调用doB方法时,
由于是对象内的方法调用,造成doB方法的@Transaction不会被Proxy对象代理,进而造成Transaction失效。
解决方法:
1 | public class ClassA { |
将需要事务的方法doB通过Proxy进行代理,doA在使用时则是通过Spring开启事务的代理进行的调用。
观点仅代表自己,期待你的留言。