我的方法如下:
@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个线程为同一所学校添加时才能序列化异常。但我正在进行序列化访问"即使我们为2所不同的学校添加学生。是不是弹簧/休眠锁定机制处理这种情况? :(不应该只锁定方法中使用的表格中的行吗?请帮助解决该特定情况。提前致谢。
答案 0 :(得分:0)
我不是100%肯定,但不是Isolation.SERIALIZABLE锁定所有表并阻止你添加学生?