python系统编码-稍后更新
2016-03-03 17:01
489 查看
bug源
这个代码第一次运行的时候没问题。
等你去拿第2页的时候,就提示说出现NullPointer。 发现是((Integer) criteria.setProjection(Projections.rowCount()).uniqueResult())为Null, 也就是根本就拿不到表总数。
为此我思考了好一阵子。
后来看了别人的代码才焕然大悟。
看第2个代码:
有些问题总结一下
1、criteria.setProjection(null);
取得了总数后,为了能够再次取得对象列表。
2、detachedCriteria.setResultTransformer(CriteriaSpecification.ROOT_ENTITY);
当hibernate采用关联的时候不使用这个返回的是个对象数组,加上这个返回的是当前列表的对象。
return (PageSupport) getHibernateTemplate().execute( new HibernateCallback() ...{ public Object doInHibernate(Session session) throws HibernateException ...{ Criteria criteria = detachedCriteria .getExecutableCriteria(session); logger.debug("SQL: " + Projections.rowCount()); //执行查询 int totalCount = ((Integer) criteria.setProjection(Projections.rowCount()).uniqueResult()).intValue(); List items = criteria.setFirstResult(startIndex) .setMaxResults(pageSize).list(); PageSupport ps = new PageSupport(items, totalCount, pageSize, startIndex); return ps; } }, true);
这个代码第一次运行的时候没问题。
等你去拿第2页的时候,就提示说出现NullPointer。 发现是((Integer) criteria.setProjection(Projections.rowCount()).uniqueResult())为Null, 也就是根本就拿不到表总数。
为此我思考了好一阵子。
后来看了别人的代码才焕然大悟。
看第2个代码:
return (PageSupport) getHibernateTemplate().execute( new HibernateCallback() ...{ public Object doInHibernate(Session session) throws HibernateException ...{ Criteria criteria = detachedCriteria .getExecutableCriteria(session); CriteriaImpl impl = (CriteriaImpl) criteria; //先把Projection和OrderBy条件取出来,清空两者来执行Count操作 Projection projection = impl.getProjection(); logger.debug("SQL: " + Projections.rowCount()); //执行查询 int totalCount = ((Integer) criteria.setProjection(Projections.rowCount()).uniqueResult()).intValue(); //将之前的Projection和OrderBy条件重新设回去 criteria.setProjection(projection); if (projection == null) ...{ criteria.setResultTransformer(CriteriaSpecification.ROOT_ENTITY); } List items = criteria.setFirstResult(startIndex) .setMaxResults(pageSize).list(); PageSupport ps = new PageSupport(items, totalCount, pageSize, startIndex); return ps; } }, true);
有些问题总结一下
1、criteria.setProjection(null);
取得了总数后,为了能够再次取得对象列表。
2、detachedCriteria.setResultTransformer(CriteriaSpecification.ROOT_ENTITY);
当hibernate采用关联的时候不使用这个返回的是个对象数组,加上这个返回的是当前列表的对象。
相关文章推荐
- Python3.4安装PyOpenGL模块及PIP常用命令
- Python 爬虫 字符集乱码问题
- Python基础(二)之Python变量和数据类型
- Python-----序列化
- Windows下Python及Scrapy的安装
- python对excel的操作
- python while循环控制流语句结构与用法
- Python学习基础(9):函数式编程
- Python 字符串、列表、字典 操作方法大全 & 正则re
- Python else与elif语句语法讲解
- 四、Opencv2.4.9和Python工具包的安装
- 深入理解Python中各种方法的运作原理(静态方法、类方法、抽象方法)
- python词云 wordcloud 入门
- 用python实现字符串的反转
- Python-----文件读写
- Python模块之pexpect
- Python-----生成器:generator
- Python中time模块详解
- python
- PEP8 Python 编码规范