我有两个服务,比如这个(简化代码):
@Service
public class OuterService {
@Autowired
InnerService innerService;
@Transactional
public void doSomething() {
List<SomeEntity> list = entityRepo.findByWhatever(...);
for(SomeEntity listElement : list) {
innerService.processEntity(listElement);
}
}
}
@Service
public class InnerService {
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void processEntity(Entity entity) {
// ...
StatusElement status = new StatusElement(...);
statusElementRepo.save(status);
}
}
现在通过退出StatusElement
退出InnerService.processEntity()
和再次插入来插入已构建的OuterService.doSomething()
。
如果我将@Transactional
OuterService.doSomething()
注释更改为@Transactional(readOnly = true)
,则只会插入一次。
MySql是否存在问题(因为它可能不支持嵌套事务),我是否需要特殊的事务管理器,或者我的代码有问题? TIA!
答案 0 :(得分:0)
我通过使用PlatformTransactionManager
以编程方式进行交易解决了这个问题。