Spring 弹簧&x2B;Hibernate,如何关闭无状态会话?
通常,我们使用Spring+Atomikos来管理JTA会话,并将hibernate.auto_close_会话设置为true。 现在,如果我们手动打开无状态会话(对于某些异步作业),如下所示:Spring 弹簧&x2B;Hibernate,如何关闭无状态会话?,spring,hibernate,stateless-session,Spring,Hibernate,Stateless Session,通常,我们使用Spring+Atomikos来管理JTA会话,并将hibernate.auto_close_会话设置为true。 现在,如果我们手动打开无状态会话(对于某些异步作业),如下所示: StatelessSession sl=sessionFactory.openStatelessSession() 如何关闭无状态会话?如果我们打电话 sl.close() 然后“当前会话”将回滚。 如果我们注释 @Transactional(传播=传播。不受支持) 在使用无状态会话的方法上,commi
StatelessSession sl=sessionFactory.openStatelessSession()代码>
如何关闭无状态会话?如果我们打电话
sl.close()
然后“当前会话”将回滚。
如果我们注释
@Transactional(传播=传播。不受支持)
在使用无状态会话的方法上,commit挂起,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管理的会话,并且调用了此方法
你能告诉我出了什么问题吗?这是一个很老的未回答的问题,但这里有什么可以作为答案:
您必须回滚事务,但无需关闭会话。除非你真的想
有些工具(如注释)会阻止您在代码中使用此工具,但这更像是:
tx.commit();
} catch (HibernateException e) {
tx.rollback();
logger.error(e);
}