Java エンティティのコレクションを更新しようとしていますが、Hibernate がバッチ更新を実行する順序により、制約違反の例外が発生します。以下の例を使用して状況を説明します。
エンティティ 学生 Int id 文字列 名前 文字列 デスク ID
ルール: 2 人の生徒が同じ机を持つことはできません
1 回目のトランザクション: 次のように 2 人の生徒を挿入します。 Student 1 Id:1 Name:ABC DeskId:D1
生徒 2 Id:2 名前:DEF DeskId: D2
この後、両方の学生エンティティを更新して机を交換することにし、更新された学生エンティティのコレクションを送信して休止状態にします update Student 1 Id:1 Name:ABC DeskId:D2
生徒 2 Id:2 名前:DEF DeskId: D1
しかし、更新は一度に1レコードずつ行われていると思うので、これは制約違反の例外につながります。
JTA エンティティ マネージャーを使用してトランザクションを管理しています。更新するコードは次のようになります
updateMultiple(Collection<Student> updatedStudents)
for (final Student student: updatedStudents)
{
final Student st= this.entityManager.getReference(Student.class, Student.getId());
student.merge(st);
}
this.entityManager.flush();
return breakClauseDtos;