Я пытаюсь обновить коллекцию объекта Java, но порядок, в котором Hibernate выполняет пакетное обновление, приводит к исключению нарушения ограничений. Я буду использовать следующий пример, чтобы объяснить ситуацию.
Entity Student Int id String Name String deskID
Правило: 2 ученика не могут сидеть за одной партой.
1-я транзакция: вставьте 2 учащихся следующим образом Идентификатор учащегося 1: 1 Имя: ABC DeskId: D1
Идентификатор студента 2: 2 Имя: DEF DeskId: D2
Теперь, после этого, я решил обновить обе студенческие сущности, чтобы поменять местами их столы, и я отправляю коллекцию обновленных студенческих сущностей в режим гибернации. Обновление Student 1 Id: 1 Name: ABC DeskId: D2
Идентификатор студента 2: 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;