【发布时间】:2013-07-24 21:19:27
【问题描述】:
ThreadLocal<Session> tl = new ThreadLocal<Session>();
tl.set(session);
获取会话,
Employee emp = (Employee)((Session)tl.get().get(Employee.class, 1));
如果我们的应用程序是基于 Web 的,则 Web 容器会为每个请求创建一个单独的线程。 如果所有这些请求同时使用同一个 Session 对象,我们应该得到 在我们的数据库操作中出现不需要的结果。 为了克服上述结果,最好将我们的会话设置为 threadLocal 对象 这不允许会话的并发使用。我认为,如果它是正确的应用程序性能应该很差。 在上述情况下有什么好的方法。 如果我走错了路,在哪些情况下我们需要使用 ThreadLocal。 我是hibernate的新手,如果这种类型的提问很愚蠢,请原谅。 提前致谢。
【问题讨论】:
-
ThreadLocal 的核心概念是,“每个通过 get 或 set 方法访问 ThreadLocal 变量的线程都有自己的、独立初始化的变量副本”。
-
你在使用 spring 和 hibernate 吗?
-
不要自己这样做。为此使用 Hibernate 本机支持:
SessionFactory.getCurrentSession()。看来你的 Hibernate 教程已经过时了。 -
是的@Santosh 我正在使用 Spring 和休眠
-
is SessionFactory.getCurrentSession() 在多线程环境中产生正确的结果。 @JB 尼泽特