现在的位置: 首页 > 综合 > 正文

用hibernate分页时记得关session!要不然会有很多有意思的错误。。。

2013年08月24日 ⁄ 综合 ⁄ 共 1869字 ⁄ 字号 评论关闭

今天终于开始做以前一直以为很难的分页,google了下,发现hibernate分页也太简单了。。。这是网上找到的代码:

Query q = session.createQuery("from Cat as c"); 
q.setFirstResult(20000);   
q.setMaxResults(100);  
List l = q.list();

先是找了半天怎么获取这个session。。。搜了一圈搜到了sessionfactory这个关键字,猛然想到spring的配置文件里貌似有这么个bean,试着直接用getSession,真的就获得了这个session~

我承认我没怎么看书。。。因为项目时间比较紧,没时间一点一点的学。过程中我就发现了,其实磨刀不误砍柴工是真理。。。只不过,刚接到项目的时候总有种紧迫感,没法安心学习。。。

继续说,我直接把上面那段代码的session改成了getSession(),结果可想而知。。。不过当时的我还蒙在鼓里。我总是以为SSH2能自动智能的帮我打理一切。。。接着我就去测试了,写完jquery的ajax函数,一测试,OK,一个响指,出实验室放松了一圈。回来继续改jquery的生成代码,改完刷新,改完刷新,突然,在某次刷新的时候出现了问题!jquery获得不了json数据了!甚至其他页面的正常struts action访问都得不到结果!我又一顿猛搜,以为是jquery的问题,倒是查到了一些jquery的小bug。。。不过断然解决不了我的问题。

我又以为是浏览器问题(之前一直因为MSIE的特殊性和娇嫩。。。一直用IE8在测试)换了遨游3,发现压根就登陆不了主页。。。漫长的等待后报错:

IllegalStateException: The configuration manager shouldn 't be null

天啊,都不合法了。。。我甚至产生了如果老师检查的时候不刷新8遍以上我是不是能过验收的恐怖想法。问题还是要解决的!我学习一休哥,开始了思考。。。

结果就是这么突然,我想到了可能是action里出问题了,但是之前没问题,只修改了dao层,那么必然问题出在了那里!再一看getSession()?这么敏感脆弱的session我居然没有细心呵护。。。导致了他和他未关闭的同伴们发生了拥挤踩踏事件。。。

最终结果如下:

public List ListDevice(int page,int records) {
    Session session = getSession();
    Query q = session.createQuery("from DeviceModel");
    q.setFirstResult(page*records);
    q.setMaxResults(records);
    List list = (List) q.list();
    session.close();
    return list;
}

问题就这么突兀的解决了~可以尽情的刷新了。我想好了,给老师看的时候说一句:这个页面你可以多刷几次,显示的数据绝对不会突然消失,哈哈~

抱歉!评论已关闭.