0

如果具有某些事务属性的事务方法调用具有不同事务属性的同一 bean 的方法会发生什么?

4

2 回答 2

1

使用 Spring 中的标准事务配置不会发生任何事情。从文档(查看参考文档以获取声明性事务管理的完整说明):

在代理模式下(默认),只有通过代理传入的外部方法调用会被拦截。这意味着自调用,实际上是目标对象中的一个方法调用目标对象的另一个方法,在运行时不会导致实际事务,即使调用的方法被标记为@Transactional。

如果您需要在同一个 bean 上使用方法调用来更改事务行为(传播、只读状态等),您可以将事务模式更改为 AspectJ 并使用编译时执行(查看此处如何执行此操作)。但我在实际实践中从未这样做过,只是为了测试。通常它是足够的默认事务设置。

于 2012-08-16T06:47:24.257 回答
0

@Transactional 的 readOnly 属性有以下异常:

@Transactional(readOnly=true)
void methodA(){}

@Transactional
void methodB(){}

如果您像这样调用该方法,并且使用 Hibernate 或其他 ORM 平台:

methodA();
methodB();

将抛出只读连接异常。

于 2012-08-16T06:48:28.917 回答