使用spring,hibernate和mysql使用嵌套事务创建重复对象

时间:2015-08-11 17:49:20

标签: java mysql spring hibernate transactions

我有两个服务,比如这个(简化代码):

@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!

1 个答案:

答案 0 :(得分:0)

我通过使用PlatformTransactionManager以编程方式进行交易解决了这个问题。

请参阅:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/transaction.html#transaction-programmatic-ptm