春のデータと休止状態を備えた春の mvc webapp を開発しています。
ブールフィールドと整数フィールドで構成されたエンティティがあります。
最初は、ブール フィールドは false で、整数フィールドは null です。
ブール値フィールドが true になったら、整数フィールドに 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 番号を取得できるようにするために、service メソッドに synchronized キーワードを入れました..しかし、それがすべての状況で機能するかどうか、それが正しい方法であるかどうかはわかりません。
seq の単一性が保証されていると確信できますか?
ありがとうマルコ