带distinct的hql查询分页时,不能使用select count(*) from (hql) 这样的方式,这样获得的总数是不对的。
这里的做法是分离出hql的select dinstinc和from之间的部分,变成 select count(distinct … ) from…
代码如下:
/**
* select dinstinct 查询的总数
* 这里按 select count(distinct … ) from … 获得总数.
*
* @param hql
* @param values
* @return
*/
private long getSelectDistinctCount(String hql, Object… values) {
int distinctIndex = hql.toLowerCase().indexOf("distinct");
int fromIndex = hql.toLowerCase().indexOf("from");
hql = removeOrders(hql);
String countQueryString = " select count(" + hql.substring(distinctIndex,fromIndex) + ") " + hql.substring(fromIndex);
List countlist = this.find(countQueryString, values);
long totalCount = (Long) countlist.get(0);
* select dinstinct 查询的总数
* 这里按 select count(distinct … ) from … 获得总数.
*
* @param hql
* @param values
* @return
*/
private long getSelectDistinctCount(String hql, Object… values) {
int distinctIndex = hql.toLowerCase().indexOf("distinct");
int fromIndex = hql.toLowerCase().indexOf("from");
hql = removeOrders(hql);
String countQueryString = " select count(" + hql.substring(distinctIndex,fromIndex) + ") " + hql.substring(fromIndex);
List countlist = this.find(countQueryString, values);
long totalCount = (Long) countlist.get(0);
if (totalCount < 1) {
return 0;
} else
return totalCount;
}
相关推荐
分页查询** - **语法**: `SET FIRST RESULT <起始位置> SET MAX RESULTS <每页数量>` - **示例**: `Query q = session.createQuery("FROM Category c ORDER BY c.name DESC"); q.setMaxResults(3); q....
在Java开发领域,尤其是使用Struts、Spring和Hibernate框架构建应用程序时,HQL(Hibernate Query Language)是一种强大的工具,用于处理对象关系映射(ORM)的数据库查询。HQL是面向对象的,允许开发者以类和对象的...
**HQL (Hibernate Query Language)** 是一种面向对象的查询语言,它允许开发人员使用类名和属性名来执行数据库查询,而不需要直接编写SQL语句。在进行多表检索时,HQL提供了多种连接方式,包括内连接、外连接等。 #...
Criteria API 是 Hibernate 提供的一种高级查询机制,它允许开发者在不直接编写 HQL 或 SQL 语句的情况下,构建复杂的数据库查询。这个API提供了一种面向对象的方式来构建查询,使得查询更具有可读性和灵活性。 1. ...