编程语言
首页 > 编程语言> > java – 使用@Transactional的类层次结构问题

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