Java 在线程中重用Hibernate会话

Java 在线程中重用Hibernate会话,java,hibernate,transactions,Java,Hibernate,Transactions,我在某个地方读到过,当刷新会话或提交事务时,会话本身被Hibernate关闭。那么,如何在同一线程中重用先前关闭的Hibernate会话呢 谢谢你错了。会话保持打开状态,只有一个新事务开始。最重要的是,当前连接到会话的所有对象都保持连接状态,因此,如果不清除会话,则此处存在内存泄漏 我在某个地方读到过,当刷新会话或提交事务时,会话本身被Hibernate关闭 flush不会关闭会话。但是,从Hibernate 3.1开始,如果将当前会话上下文类配置为“线程”或“jta”,或者使用事务管理器loo

我在某个地方读到过,当刷新会话或提交事务时,会话本身被Hibernate关闭。那么,如何在同一线程中重用先前关闭的Hibernate会话呢


谢谢你错了。会话保持打开状态,只有一个新事务开始。最重要的是,当前连接到会话的所有对象都保持连接状态,因此,如果不清除会话,则此处存在内存泄漏

我在某个地方读到过,当刷新会话或提交事务时,会话本身被Hibernate关闭

flush
不会关闭会话。但是,从Hibernate 3.1开始,如果将
当前会话上下文类
配置为“
线程
”或“
jta
”,或者使用
事务管理器lookup
(强制jta)和
getCurrentSession()
,则
提交将关闭会话

下面的代码对此进行了说明(此处
当前会话\u上下文\u类
设置为
thead
):

有关这方面的背景信息,请参见d和文档中的部分

那么,如何在同一线程中重用先前关闭的Hibernate会话呢

使用内置的“
managed
”策略(将
current\u session\u context\u class
属性设置为
managed
),或者使用从
ThreadLocalSessionContext
派生的自定义
CurrentSessionContext
并覆盖
threadlocalsessioncontent.isAutoCloseEnabled()


同样,请参见上述链接,如果当前会话上下文类设置为“线程”或“jta”,则也将回滚并关闭会话?
Session session = factory.getCurrentSession();
Transaction tx = session.beginTransaction();

Product p = new Product();
session.persist(p);
session.flush();
System.out.println(session.isOpen()); // prints true

p.setName("foo");
session.merge(p);
tx.commit();
System.out.println(session.isOpen()); // prints false