在线程中重用Hibernate会话

Mar*_*ark 4 java hibernate transactions

我已经读过某个地方,当刷新会话或提交事务时,会话本身由Hibernate关闭.那么,我如何在之前关闭的同一个线程中重用Hibernate Session?

谢谢

Pas*_*ent 12

我已经读过某个地方,当刷新会话或提交事务时,会话本身由Hibernate关闭.

一个flush关闭会话.但是,从Hibernate 3.1开始,如果您配置为" "或" ",或者如果您使用(强制JTA),commit则会关闭会话.current_session_context_classthreadjtaTransactionManagerLookupgetCurrentSession()

以下代码说明了这一点(current_session_context_class设置为thead此处):

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
Run Code Online (Sandbox Code Playgroud)

这个问题2.5.有关此背景的文档中的上下文会话.

那么,我如何在之前关闭的同一个线程中重用Hibernate Session?

使用内置的" managed"策略(将current_session_context_class属性设置为managed)或使用自定义CurrentSessionContext 派生ThreadLocalSessionContext和覆盖ThreadLocalSessionContet.isAutoCloseEnabled().

再次,请参阅上面的链接以及长对话的扩展会话模式怎么样?