我正在尝试更新 Java 实体的集合,但 Hibernate 执行批量更新的顺序会导致约束冲突异常。我将使用下面的例子来解释这种情况。
实体 Student Int id String Name String deskID
规则:2名学生不能有同一张桌子
第一次交易:插入 2 名学生如下 Student 1 Id:1 Name:ABC DeskId:D1
学生 2 ID:2 姓名:DEF DeskId:D2
现在,在此之后,我决定更新两个学生实体以交换他们的课桌,并将一组更新的学生实体发送到休眠更新学生 1 ID:1 名称:ABC DeskId:D2
学生 2 ID:2 姓名:DEF DeskId:D1
但这会导致违反约束异常,因为我认为更新一次只发生一条记录。
我正在使用 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;