私はデータベースにそれを更新するために、休止状態使用方法可変パラメータスレッドセーフな静的メソッド?
public static Person updatePersonId (Person person)
{
// If the ID of the person reaches the maximum ID in our predefined range in configuration then reset the ID from the start otherwise it will cross the range we defined.
if (person.getNewID().longValue() == person.getLastPossibleID().longValue())
{
person.setNewID (person.getFirstID());
}
// add 1 to Old ID to get new ID
person.setNewID (person.getNewID + 1);
return person;
}
を持っています。
ご覧のとおり、データベースに同じID
の人を1人以上置くことはできません(以前のIDに常に1が追加されるため)。
私のアプリケーションを同時に実行すると、つまり同時に2つのトランザクションが実行されると、人に割り当てられたIDが重複してしまうなどの問題があります。
Database row
PersonID PersonName
1 Bob
2 Robert
2 Daniel
スレッドセーフではないメソッドを作成しましたか?同期キーワードを追加しますか?
私のメソッドはスレッドセーフではありませんか?同期キーワードを追加しますか? NO DBシーケンスを使用する –
@ScaryWombat、OPはサイクリングシーケンスが必要です。 – shmosel
しかし、皆さん、シーケンスなしでこれを行うことはできますか?私のメソッドはスレッドセーフではありませんか?並行性の問題により重複IDが明らかに発生していますか? – Aiden