如何使存储库保存与Spring Boot同步

时间:2018-05-10 16:50:02

标签: spring-boot transactions spring-data-jpa

我有一种方法首先从我的表中获取一个类型的最后一个id。 然后我用这个数字设置我的bean并保存

  Long number = geradorProtocoloService.getNumero(protocolo.getTipo()    
  protocolo.setNumber(number);     
  protocolo = protocoloRepository.saveAndFlush(protocolo);

我将此代码放在同步块中

synchronized (this) {
  protocolo.setNumero(geradorProtocoloService.getNumero(protocolo.getTipo());
  protocolo = protocoloRepository.saveAndFlush(protocolo);
}

该方法有更多逻辑(保存文件等)然后将其返回给我的用户

但是当我运行我的测试时,他会捕获几次相同的数字(数字),我认为这是因为当执行saveAndFlush时,jpa不会提交我的事务。

那么如何让我的同步块中的所有内容都与jpa一起提交

TKS

1 个答案:

答案 0 :(得分:0)

您的分析可能正确。

通常,交易由@Transactional注释控制。因此,如果您使用@Transactional注释在Spring Bean中的方法中提取同步块,并从外部调用它,那么它最终将提交。