@Transactional (изоляция = Isolation.SERIALIZABLE) как заблокировать только несколько строк - PullRequest
0 голосов
/ 24 апреля 2018

У меня есть такой метод:

@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 разных школ.Разве механизм блокировки пружины / гибернации не имеет отношения к таким случаям?:( Разве это не должно блокировать только те строки из таблицы, которые использовались во время метода? Пожалуйста, помогите в этом конкретном случае. Заранее спасибо.

1 Ответ

0 голосов
/ 24 апреля 2018

Я не уверен на 100%, но разве Isolation.SERIALIZABLE блокирует все таблицы и не позволяет добавить учащегося?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...