2

这是问答式的。

在使用 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);
    }
4

1 回答 1

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);
        }
    }
于 2012-08-13T08:45:30.150 回答