我需要知道 Hibernate 的 session 是否是线程安全的。但是很明显,每个线程都会附加一个新 session 来执行。但我的问题是,如果我在一个线程中更新了某个实体的某些值,那么在同一时间执行期间,这会反射(reflect)在其他线程中吗?
我的问题是,当我从两个线程顺序触发更新时,值会正确更新,但是当我几乎完全触发更新时,它就会失败。
例如。 表的当前阶段。
ID NAME MARKS
------- --------- --------
1 John 54
我正在尝试做以下事情:
Student student = session.load(Student.class, 1);
student.setMarks(student.getMarks() + 1);
session.update(student);
session.close();
当我尝试在循环中运行上面的代码时说 10,然后表“student”中的“marks”的值被正确更新,即该值被更新为正确的 64。
但是当我尝试在多线程环境中运行相同的代码时,结果很糟糕。
最佳答案
It is not intended that implementors be threadsafe. Instead each thread/transaction should obtain its own instance from a SessionFactory.
即使考虑到这一点,您的行为可能仍然不是您所期望的,因为交易开始发挥作用。您将必须设置适当的 transaction isolation level .查看configuration guide , hibernate.connection.isolation
属性。
关于java - Hibernate的session线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3777794/