我正在开发弹簧数据和休眠的弹簧mvc webapp。保证与弹簧数据和休眠的唯一编号生成
我有一个由布尔型字段和整数字段组成的实体。
开始布尔字段为false,整数字段为空。
当布尔领域成为真正的我需要分配到整型字段的唯一值等于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);
}
在我Reposiroty:
@Query("select MAX(seq)+1 FROM Obj")
Integer getLastSeq();
我把synchronized关键字服务方法,以确保每次仅一个线程可以得到一个独特的MAX + 1个..但我不知道,如果它适用于所有情况,如果它是正确的。
我可以确定它确保seq的唯一性吗?
谢谢 马尔科
只有英国到'seq'专栏才能保证你的独特性。 – user1516873 2013-03-21 08:34:13
我无法将其设置为UK,因为某些实体必须具有整数值null。只有当布尔变成真时,整数才变为非空! – gipinani 2013-03-21 08:37:38
好的,用户可以明确地调用'obj.setSeq()'? – user1516873 2013-03-21 08:46:15