forgot to call close()

criteriaを使用しているクラスのテストで以下の警告がでていた。

Running hoge.HogeDaoTest
[WARN] ConnectionManager - unclosed connection, forgot to call close() on your session?
(略)
Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 9.403 sec


criteriaを使用するのにgetSession()をした場合は自分でrelease()をしないといけないのかな?

    Session session = getSession();
    
    Criteria criteria = session.createCriteria(hogeView.class);

    (略)

    List list = criteria.list();
    
    releaseSession(session);
    
    return list;


org.springframework.orm.hibernate.support.HibernateDaoSupportではclose()のメソッドはないので、これを使うようだ。







が、調べてみるとどうやらもっといい方法があるらしい。
http://forum.hibernate.org/viewtopic.php?t=932088&view=next&sid=cbf4dc2fe997b923a82d6e62d61fd191

public List getProductList() {
    return getHibernateTemplate().executeFind(new HibernateCallback() {
        public Object doInHibernate(Session session) throws HibernateException {
        Criteria criteria = session.createCriteria(Product.class);
        //criteria.addOrder(Order.asc("title"));
        return criteria.list();
    });
}


criteriaへの条件追加が長いとちょっと見にくいけど、try-finalyがないのですっきりするかな?