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がないのですっきりするかな?