私のグループクラスには、誰が呼び出しようとしているかによって操作を許可する必要があるかどうかをJavaコードが検証するために使用するトークン属性があります。英数字キーを生成し、グループコンストラクタ内にトークンを割り当てるために使用しているコードがあります。例えばバッチインサートの生成値で重複を防ぐ方法
public Group(){
super();
this.token = Crypt.generate(30); // length of key
}
これが正常に動作していると私のデータベースが今小さく、しかし、私は、生成されたキーがすでに存在する可能性があることを考えています。この場合、データをデータベースに挿入しようとすると、org.springframework.dao.DataIntegrityViolationExceptionが返されます。私はtry/catchですべてのinsert文をラップして再試行することについて議論しましたが、私は通常バッチプロセスのGroupテーブルに現在その時点で挿入しているので、正常に保存された可能性のあるレコードを確認する必要があります。
List<Group> groups = new ArrayList<>();
groups.add(new Group("grp1");
groups.add(new Group("grp2");
groups.add(new Group("grp3");
try {
groupRepository.save(groups);
} catch (DataIntegrityViolationException e){
List<Group> secondAttemptGroups = new ArrayList<>();
for(Group g : groups){
Group insertedGroup = groupRepository.findByName(g.getName());
if(insertedGroup == null){
secondAttempGroups.add(new Group(g.getName());
}
}
if(!(secondAttempGroups.isEmpty()){
try {
group.repository.save(secondAttempGroups);
} catch(DataIntegrityViolationException e2){
// ...
}
}
}
これを防ぐには、より良い方法が必要です。
このトークンとは何ですか。それはちょうどランダムなユニークなキーですか?その場合は、UUIDを使用します。 –
または、データベースで鍵を作成させます。 – Robert
UUIDとは何ですか? – jDub9