我正在開發彈簧數據和休眠的彈簧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