У меня есть такой метод:
@Transactional(isolation = Isolation.SERIALIZABLE)
public default Student doSomething(Student student) {
School sch = student.getSchool(); // @JoinColumn's
List students = sch.getAllStudents();
List names = getAllNames(students); // stream.map to names or something similar.
if(!names.contains(student.name)) {
save(student);
}
}
Как видно из фрагмента кода, у нас есть студент.От ученика мы получаем школу, а затем всех учеников этой школы.Затем мы получаем их имена, и если ученика нет, мы добавляем его - иначе нет.Из этого кода я ожидаю сериализованное исключение, только когда два потока добавляются для одной и той же школы.Но у меня "нет возможности сериализованного доступа", даже если мы добавляем учеников для 2 разных школ.Разве механизм блокировки пружины / гибернации не имеет отношения к таким случаям?:( Разве это не должно блокировать только те строки из таблицы, которые использовались во время метода? Пожалуйста, помогите в этом конкретном случае. Заранее спасибо.