我有一种方法首先从我的表中获取一个类型的最后一个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
答案 0 :(得分:0)
您的分析可能正确。
通常,交易由@Transactional
注释控制。因此,如果您使用@Transactional
注释在Spring Bean中的方法中提取同步块,并从外部调用它,那么它最终将提交。