Java 递归调用方法期间,Hibernate会话关闭异常

Java 递归调用方法期间,Hibernate会话关闭异常,java,hibernate,recursion,Java,Hibernate,Recursion,在我的应用程序中,我需要递归调用一个方法来实现需求 但是当我调用我得到的方法时 _Exception in thread "main" org.hibernate.SessionException: Session was already closed at org.hibernate.internal.SessionImpl.close(SessionImpl.java:410) at com.cerner.core.dao.oracleImpl.test.TestRecurssionSess

在我的应用程序中,我需要递归调用一个方法来实现需求

但是当我调用我得到的方法时

_Exception in thread "main" org.hibernate.SessionException: Session was already closed
at org.hibernate.internal.SessionImpl.close(SessionImpl.java:410)
at com.cerner.core.dao.oracleImpl.test.TestRecurssionSessionClose.fact(TestRecurssionSessionClose.java:40)
at com.cerner.core.dao.oracleImpl.test.TestRecurssionSessionClose.main(TestRecurssionSessionClose.java:49)
_

我有这方面的测试代码

public class TestRecurssionSessionClose {
private SessionFactory factory;
private Session session;
private Transaction transaction;

public TestRecurssionSessionClose() {
    HibernateUtil.configureSessionFactory();
    factory = HibernateUtil.getFactory();
}

public int fact(int n) {
    System.out.println(factory.isClosed());
    session = factory.openSession();
    transaction = session.beginTransaction();
    try {
        if (n == 1) {
            return 1;

        } else {
            System.out.println(n);
            return (n * fact(n - 1));
        }
    } catch (

    HibernateException ex) {
        if (transaction != null)
            transaction.rollback();
        return 0;
    } finally {
        if (session != null) {
            session.close();
        }

    }

}

public static void main(String[] args) {
    TestRecurssionSessionClose testRecurssionSessionClose = new TestRecurssionSessionClose();
    System.out.println(testRecurssionSessionClose.fact(3));
}
}


我刚开始冬眠。请告诉我这里缺少什么?

默认情况下,某些hibernate版本具有
hibernate.transaction.auto\u close\u session
true
。这使得会话自动关闭,而无需关闭

禁用自动关闭会话或更好地使用


请参阅:

默认情况下,某些hibernate版本具有
hibernate.transaction.auto\u close\u session
true
。这使得会话自动关闭,而无需关闭

禁用自动关闭会话或更好地使用

见: