Hibernate条件返回页面和rowcount
使用Hibernate Criteria我试图实现分页但问题是对于每个页面fetch我必须为结果进行两次db调用,对于总记录数进行另一次db调用。 有没有任何有效的方法,以便在单个数据库调用中我可以获得数据或我可以减少数据库调用。
Criteria criteria=session.createCriteria(Student.class); criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); criteria.add(Restrictions.ne("enquiryStatus", ENQUIRY.JOINED)); criteria.setMaxResults(10); criteria.setFirstResult((paginate.getStartIndex()-1)*10); criteria.setProjection(Projections.rowCount()); //here i need to fetch total row count and records
是的,您需要单独的查询来获取总结果计数。
Query aCountQuery = session.createQuery("select count(s.id) from Student s where s.enquiryStatus != :enquiryStatus"); aCountQuery.setParameter("enquiryStatus", ENQUIRY.JOINED); Long resultCount = (Long)aCountQuery.uniqueResult();
要么
Criteria criteria=session.createCriteria(Student.class); criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); criteria.add(Restrictions.ne("enquiryStatus", ENQUIRY.JOINED)); criteria.setProjection(Projections.rowCount()) Long resultCount = (Long)criteria.uniqueResult();
更新
现在,您可以对分页和结果计数的结果使用相同的Criteria
Criteria criteria=session.createCriteria(Student.class); criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); criteria.add(Restrictions.ne("enquiryStatus", ENQUIRY.JOINED)); criteria.setMaxResults(10); criteria.setFirstResult((paginate.getStartIndex()-1)*10); List students = criteria.list(); criteria.setProjection(null); criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); Long resultCount = (Long)criteria.uniqueResult();
据我所知,没有直接的方法可以做到这一点。尽可能简单的是写一个小的hql query
(我的选择),以及你的主要criteria
。
Number count = (Number) session.createQuery( "select count(s.id) from Student s").uniqueResult();
- Hibernate Oracle表空间注释
- 用hibernate执行本机sql
- Hibernate使用嵌入的ElementCollection抛出ConcurrentModificationException
- Spring-Hibernate在webapp中使用,什么是Thread安全会话管理的策略
- Hibernate可以使用MySQL的“ON DUPLICATE KEY UPDATE”语法吗?
- 我需要这个错误的帮助:java.lang.NoSuchMethodError
- JPA和Hibernate注释之间的关系
- 我可以在Discriminated Entity Hierarchy的子类上使用CompositeId吗?
- Hibernate多态查询