假设我有一个Repository类。
@Repository
class MyRepository {
@Transactional
void method1 () {
// some logic here
}
void method2 () {
// some logic here
method1();
// some logic here
}
}
是否可以在String中执行此操作?这是如何工作的?
答案 0 :(得分:5)
这不起作用,因为这是自我调用。见
Spring @Transaction method call by the method within the same class, does not work?
根据您的应用程序及其职责,您可以为method2()
创建另一个bean。
除此之外,DAO方法通常不应注释@Transactional
。见
Where does the @Transactional annotation belong?
答案 1 :(得分:1)
这将不起作用,因为当您调用@Transaction
时,该方法将超出method2
的范围。但是您可以通过以下方式应用骇客并使用method2
中的this
来调用method1
。
this.method2();
答案 2 :(得分:0)
你不能这样做,因为Spring包装将从另一个类(服务)调用的方法。如果你使用相同的类调用带注释的方法,Spring将无法执行任何操作,因为它无法包装它们。
答案 3 :(得分:0)
您应该使用自我注入从非Transactional
方法中调用Transactional
方法,因为在Spring中,由于AOP代理,您不能简单地从同一实例中调用@Transactional
方法东西
@Repository
class MyRepository {
@Autowired
MyRepository selfTxMyRepository;
@Transactional
void method1 () {
// some logic here
}
void method2 () {
// some logic here
selfTxMyRepository.method1();
// some logic here
}
}
在此处查看一些说明:https://vladmihalcea.com/the-open-session-in-view-anti-pattern/