如果具有某些事务属性的事务方法在具有不同事务属性的同一bean中调用方法,会发生什么?
答案 0 :(得分:1)
在Spring中使用标准事务配置将会发生。从文档(在reference documentation中查看声明性事务管理的完整说明):
在代理模式(默认设置)下,只有外部方法调用 通过代理进入是截获的。这意味着 自调用,实际上是目标对象调用中的一个方法 目标对象的另一种方法,不会导致实际的 即使调用的方法被标记,运行时的事务也是如此 @Transactional。
如果您需要在同一个bean上使用方法调用来更改事务行为(传播,只读状态等),您可以将事务模式更改为AspectJ并使用编译时间筛选(look here如何执行此操作)。但我从来没有在实际操作中这样做,只是为了测试。通常它足够默认的交易设置。
答案 1 :(得分:0)
@Transactional的readOnly属性具有以下异常:
@Transactional(readOnly=true)
void methodA(){}
@Transactional
void methodB(){}
如果你调用这样的方法,并使用Hibernate或其他ORM平台:
methodA();
methodB();
将抛出只读连接异常。