万贤
作家
作家
  • 铜币1枚
  • 威望24点
  • 贡献值1点
阅读:1349回复:2

问一个hibernate的session问题

楼主#
更多 发布于:2007-04-28 11:51
我用的是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
0000
作家
作家
  • 铜币143枚
  • 威望34点
  • 贡献值1点
1C#
发布于:2007-04-28 13:29
Re:问一个hibernate的session问题
我说什么来着……不要跨层调用……
session管理是DAO层面(model)的事,你在页面上调用查询方法,session已经关闭了(也许根本没打开),当然不行了。
应该是:
request ---> action -     ---> jsp
                            |   |
                         interface
                            |   |
                            DAO
                              |
                            |DB|

当然这是传统的做法,leener先生可能有更新的技术(我已经落后很久了……)
.--. |o_o | |:_/ | // \ \ (| | ) /'\_ _/`\ \___)=(___/
万贤
作家
作家
  • 铜币1枚
  • 威望24点
  • 贡献值1点
2C#
发布于:2007-04-28 17:30
Re:问一个hibernate的session问题
用ServiceLocator也不行么?我怎样才能才能调用查询把值传页面上?
游客

返回顶部