我需要知道,hibernate的会话是否是线程安全的。但是很明显,新会话将附加到每个线程以执行。但是我的问题是,如果在一个线程中我已经更新了某个实体的某个值,那么这将在同一时间执行期间反映在另一个线程中吗?
我的问题是,当我依次从两个线程启动更新时,值会正确更新,但是当我几乎完全启动更新时,它将失败。
例如 表的当前阶段。
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,这是正确的。
但是,当我尝试在线程环境中运行相同的代码时,会产生不好的结果。
并不意味着实现者是线程安全的。相反,每个线程/事务都应从SessionFactory获取其自己的实例。
即使考虑到这一点,您的行为仍可能不是您所期望的,因为交易开始起作用。您将必须设置适当的事务隔离级别。请参阅配置指南,hibernate.connection.isolation财产。
hibernate.connection.isolation