gpt4 book ai didi

java - Hibernate 条件返回页数和行数

转载 作者:太空狗 更新时间:2023-10-29 22:45:05 24 4
gpt4 key购买 nike

我正在尝试使用 Hibernate 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);

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=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<Student> students = criteria.list();

criteria.setProjection(null);
criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
Long resultCount = (Long)criteria.uniqueResult();

关于java - Hibernate 条件返回页数和行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18484988/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com