我正在开发一个带有spring数据和hibernate的spring mvc webapp。
我有一个由布尔字段和整数字段组成的实体。
一开始,布尔字段为假,整数字段为空。
当布尔字段变为真时,我需要为整数字段分配一个等于 MAX(seq) +1 的唯一值
为此,我以这种方式编写我的服务方法:
@Override
public synchronized Obj save(Obj entry) {
if (entry.getBool() && entry.getSeq() == null){
Integer seq = objRepository.getLastSeq();
if (seq == null){
seq = 1;
}
entry.setSeq(seq);
}
return entry.save(entry);
}
在我的存储库中:
@Query("select MAX(seq)+1 FROM Obj")
Integer getLastSeq();
我将同步关键字放在服务方法中,以确保一次只有一个线程可以获得唯一的 MAX+1 数字。但我不确定它是否适用于所有情况以及它是否是正确的方法。
我可以确定它保证 seq 的唯一性吗?
谢谢马可