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

Spring boot 如何使存储库保存与Spring Boot同步,spring-boot,transactions,spring-data-jpa,Spring Boot,Transactions,Spring Data Jpa,我有一个方法,它首先通过一种类型从表中获取最后一个id。 然后我用这个数字设置bean并保存 Long number = geradorProtocoloService.getNumero(protocolo.getTipo() protocolo.setNumber(number); protocolo = protocoloRepository.saveAndFlush(protocolo); 我把这个代码放在一个同步块中 synchronized (this

我有一个方法,它首先通过一种类型从表中获取最后一个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);
}
该方法具有更多逻辑(保存文件等),然后将其返回给我的用户

但是当我运行我的测试时,他捕捉到了几次相同的数字(numero),我认为这是因为当我执行saveAndFlush时jpa没有提交我的事务

那么,我怎样才能使同步块中的所有内容都提交给jpa呢


你的分析可能是对的


通常,事务由
@Transactional
注释控制。因此,如果您在Springbean中的一个方法中使用
@Transactional
注释提取同步块,并从任何事务外部调用它,它最终将提交。

它是否在服务中?服务是否用
@Transactional
注释?我认为你可能需要提供更多的背景。