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

时间:2015-10-09 07:14:10

标签: 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.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的新手。请告诉我这里缺少什么?

1 个答案:

答案 0 :(得分:0)

默认情况下,某些休眠版本的 hibernate.transaction.auto_close_session true。这使得会话自动关闭而无需关闭。

禁用自动关闭会话或更好地使用automatic session context management

请参阅:Session configuration