|
阅读:1349回复:2
问一个hibernate的session问题
我用的是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的问题,不过没有解决放弃掉了...这个是单独的一个方法怎么也这样了呢?? Thanks any reply |
|
|
1C#
发布于:2007-04-28 13:29
Re:问一个hibernate的session问题
我说什么来着……不要跨层调用……
session管理是DAO层面(model)的事,你在页面上调用查询方法,session已经关闭了(也许根本没打开),当然不行了。 应该是: request ---> action - ---> jsp | | interface | | DAO | |DB| 当然这是传统的做法,leener先生可能有更新的技术(我已经落后很久了……) |
|
|
|
2C#
发布于:2007-04-28 17:30
Re:问一个hibernate的session问题
用ServiceLocator也不行么?我怎样才能才能调用查询把值传页面上? |
|