我用的是hibernate+spring,一个方法使用Criteria进行查询
写了一个基础服务的实现,这个方法的代码如下
/*通过一个po对象得到映射数据库的信息*/
public Criteria findAllByCriteria(final Class c) {
return (Criteria) getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException {
Criteria criteria = session.createCriteria(c);
return criteria;
}
}, true);
}
单元测试通过,但是通过监听在页面上实现这个方法就不行(其他方法通过监听就没有问题),报错是说Session is closed
报错信息
11:21:55,512 [http-8080-Processor25] ERROR StandardWrapperValve : Servlet.service() for servlet jsp threw exception
org.hibernate.SessionException: Session is closed!
at org.hibernate.impl.AbstractSessionImpl.errorIfClosed(AbstractSessionImpl.java:49)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1541)
at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)
排查了半天可能就是觉得这个findAllByCriteria方法里面Session的问题了...
以前多表联查的时候也出现过这个Session is closed的问题,不过没有解决放弃掉了..如果不能直接从model层直接调用查询到页面.怎么才能实现呢??
Thanks any reply
------解决方案--------------------
应该是到执行jsp页面的时候hibernate的session已经关闭了
试试hibernate的一个jsp的filter,可以在jsp中也用hibernate session.
<filter>
<filter-name> hibernateFilter </filter-name>
<filter-class> org.springframework.orm.hibernate.support.OpenSessionInViewFilter </filter-class>
</filter>