Spring 弹簧&x2B;Hibernate,如何关闭无状态会话?

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

通常,我们使用Spring+Atomikos来管理JTA会话,并将hibernate.auto_close_会话设置为true。 现在,如果我们手动打开无状态会话(对于某些异步作业),如下所示:

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);
    }