【发布时间】:2012-11-23 06:14:09
【问题描述】:
通常,我们使用 Spring + Atomikos 来管理 JTA 会话并将 hibernate.auto_close_session 设置为 true。 现在,如果我们手动打开一个无状态会话(对于某些异步作业):
StatelessSession sl = sessionFactory.openStatelessSession();
我们如何关闭 StatelessSession?如果我们调用
sl.close()
那么“currentSession”将回滚。 如果我们注释
@Transactional(propagation = Propagation.NOT_SUPPORTED)
在使用 StatelessSession 的方法上,提交挂起,Atomikos 日志显示它不断产生新事务并且永不停止。
完整代码:
public Vendor findByCode(String code) {
StatelessSession slsession = null;
Transaction tx = null;
try {
slsession = getStatelessSession();
tx = slsession.beginTransaction();
return (Vendor) slsession.createQuery("from Vendor"
+ " where code = :code")
.setParameter("code", code)
.uniqueResult();
} catch (HibernateException e) {
e.printStackTrace();
return null;
} finally {
if (slsession != null && tx != null) {
tx.commit();
slsession.close();
}
}
}
已经有一个 Spring 托管会话,并且调用了这个方法。
你能提出什么问题吗?
【问题讨论】:
标签: spring hibernate stateless-session