Spring + Hibernate 多个线程中的会话管理

我创建一个系统,其中每个客户端的请求在服务器端生成多个流。 然后每个线程都使用一个或多个 DAOs /一些 DAOs 可以同时使用多个流/. 全部 DAOs 进入 /
@Autowired

/ 在我的流课程中 Spring. 每个 DAO 也得到了
SessionFactory

注射。

管理会话的正确方法是什么 Hibernate 通过这几个人 DAOs, 因此,由于多线程环境,我不会遇到问题 /例如,几个 DAOs 来自不同的流尝试同时使用相同的会话/?

我指出的是足够的
hibernate.current_session_context_class=thread

在配置中 Hibernate, 然后每次都在 DAO 刚用过
SessionFactory.getCurrentSession//

执行这项工作? 根据需要会对每个流进行适当检测到并创建会话吗?
已邀请:

窦买办

赞同来自:

是的。 这就足够了。

设置值时
hibernate.current_session_context_class


thread

会议退回
SessionFactory.getCurrentSession//

, 来自实例
ThreadLocal

.

每个线程都有自己的独立实例
ThreadLocal

, 因此,不同的流将无法访问相同的会话。 hibernate .

行为
SessionFactory.getCurrentSession//

这是:如果在当前流中第一次调用它,则打开新会话并返回 . 如果在同一线程中再次调用,则将返回相同的会话。

因此,您可以获得相同的会话以用于不同的方法。 DAO 在相同的交易代码中,简单地造成
SessionFactory.getCurrentSession//

. 它不允许您转移会话 Hibernate 通过方法的输入参数 DAO 如果您必须调用许多不同的方法。 DAO 在相同的交易代码中 .

要回复问题请先登录注册