为什么数据库呼叫在一些有限的呼叫后休眠

时间:2012-08-13 08:45:30

标签: java hibernate hibernate-session

这是一种Q& A风格。

使用SessionFactoryUtils.getSession获取会话并进行查询时,可以仅调用有限计数,并在该限制计数后等待调用。 为什么会这样?

    try {
        SessionFactory sessionFactory = getHibernateTemplate().getSessionFactory();
        Session session = SessionFactoryUtils.getSession(sessionFactory, true);
        Query query = session.getNamedQuery("updateAField");

        query.setParameterList("states", states);

        int updatedCount = query.executeUpdate();
        return updatedCount;
    } catch (Exception e) {
        logger.error(e.toString());
        throw new Throwable(e);
    }

1 个答案:

答案 0 :(得分:3)

因为您正在从Hibernate获取会话但是您没有发布它。 所以通过调用SessionFactoryUtils.closeSession(session);你必须在你的功能结束时释放使用过的会话。 调用此函数的限制计数是数据库连接池大小。 它将是:

    SessionFactory sessionFactory = null;
    Session session = null;
    try {
        sessionFactory = getHibernateTemplate().getSessionFactory();
        session = SessionFactoryUtils.getSession(sessionFactory, true);
        Query query = session.getNamedQuery("updateAField");

        query.setParameterList("states", states);

        int updatedCount = query.executeUpdate();
        return updatedCount;
    } catch (Exception e) {
        logger.error(e.toString());
        throw new Throwable(e);
    } finally {
        if (session != null) {
            SessionFactoryUtils.closeSession(session);
        }
    }