java – 使用@Transactional的类层次结构问题
作者:互联网
项目设置:Spring 3.0.5 / JPA 2 / Hibernate / @Transactional
我们使用几个不同的数据源(因此使用不同的事务管理器),但具有公共服务基类,因为许多功能被重用.
所以我们认为我们可以通过使用Custom Annotations来解决这个问题.我们在抽象基类中定义所有方法,并为每个事务管理器创建一个空实现类.
现在的问题是:
在AbstractFallbackTransactionAttributeSource
,这是正在进行的查找:
TransactionAttribute txAtt = findTransactionAttribute(specificMethod);
// ...
// Second try is the transaction attribute on the target class.
txAtt = findTransactionAttribute(specificMethod.getDeclaringClass());
首先检查方法,然后检查声明方法的类(及其祖先).但在我们的上下文中,自定义注释驻留在一个子类中,通过向上移动无法找到.
那么我们如何解决这个问题呢?
[我也问过这个问题in the Spring Community Forum]
解决方法:
很棒的.我不知道一个好的解决方案,但作为一种解决方法,你可以在实现中覆盖有问题的方法,如下所示:
@Override
void method(...)
// Just to work around a bug in AbstractFallbackTransactionAttributeSource
super.method(...);
}
这将使@Transactional可见,但它很难看: – /
标签:java,spring,spring-aop,spring-orm,spring-transactions 来源: https://codeday.me/bug/20190630/1338966.html