我需要知道,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
财产。
问题内容: 我知道会话不是线程安全的。我的第一个问题:将实体传递给另一个线程,对它做一些工作,然后将其传递回原始线程并进行更新,是否安全? 我的第二个问题:在一个线程中创建一个实体并将其保存在另一个线程中是否安全? 编辑 我忘了提到实体是为快速加载而专门配置的 问题答案: 否。该实体已附加到会话中,并包含链接到该会话的代理(以延迟自身加载)。因此,这样做将使用多个线程中的会话。由于会话不是线程安全
我正在尝试使用MyBatis和一个雪花数据库。我的情况和这张海报差不多: 配置mybatis以使用现有连接 本质上,我可以获得java.sql.Connection对象,但无法通过DataSource或Oracle等RDBMS数据库通常执行的其他步骤获得该对象。一个建议的解决方案是这样做: 这些将在多线程环境中。如果有人关闭了SnowflakesSession对象,那么是否关闭了底层java.sq
问题内容: 我正在构建一个系统,其中来自客户端的每个请求都会在服务器端生成多个线程。然后,每个线程都使用一个或多个DAO(某些DAO可以同时被多个线程使用)。Spring 将所有DAO注入()到我的线程类中。每个DAO也接受注射。 什么是在这些多个DAO之间管理Hibernate会话的正确方法,这样我就不会因多线程环境而遇到问题(例如,来自不同线程的几个DAO试图同时使用同一会话)? 我在Hibe
问题内容: 已锁定 。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 用PHP维护负责的会话安全性有哪些准则?网络上到处都有信息,现在是时候将它们全部集中在一个地方了! 问题答案: 为了确保会话安全,需要执行以下几项操作: 对用户进行身份验证或执行敏感操作时,请使用SSL。 只要安全级别发生更改(例如登录),就重新生成会话ID。如果愿意,您甚至可以为每个请求
我试图弄清楚spring是如何将线程安全的请求/会话范围的bean注入控制器组件(即通过方法访问这些bean的单线程和多线程)的 作为例子,考虑<代码> HttpServletRequest 字段,该控件标记为“代码> @ AutoWordEng/代码>注释(我知道将控制器与servlet API配对是不好的,但在学习目的上可以)。我了解到这样的bean是使用CGLib代理的,但仍然无法弄清楚代理
问题内容: 我已经在我的应用程序中以相同的方式使用了本教程:http : //www.benmccann.com/hibernate-with-jpa-annotations- and-guice/ 我的应用程序是JAX-RS Web服务,它将接收许多并发请求并进行数据库更新。 GenericDAOImpl.java实现: } 如果2个并发线程尝试保存实体,我得到 如果我评论交易,保存效果很好。