2

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);
    }
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 に答える