java - Hibernate的session线程安全吗?

标签 java hibernate session thread-safety hibernate-session

我需要知道 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/

相关文章:

java - 检查编辑对数据库 ms-access 是否有效

java - 将异常传输到 UI 的最佳方式?

java - hibernate - 运行时过滤关系

java - Modeshape 中的 session 不可用 - JCR 异常

mysql - 用户注销后是否应该从记录中清除 session 表?

asp.net - 为什么不重复使用 "ASP.NET_SessionId"?

java - Flash 中的 HTTP POST - 客户端在响应前关闭 TCP 连接

c# - 是否可以将 css 注入(inject)到使用 Html.FromHtml 的 TextView 中?

java - 带有 Hibernate 4.2 错误 : setCharacterStream(ILjava/io/Reader;J)V is abstract 的 C3p0

java - Persistence.xml 中的 Hibernate 自动检测不起作用