带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;
}
相关推荐
### Hibernate中HQL语句查询学习笔记 #### HQL基础 **HQL**(Hibernate Query Language)是Hibernate框架推荐使用的查询语言,它提供了一种面向对象的方式来查询数据库,支持多种复杂的查询操作,如继承、多态及...
这种运算方式在HQL中并不常见,但在某些特定场景下可能需要用到。 - **查询单个对象**: ```java Object uniqueResult = session.createQuery("FROM TableName WHERE column1 = :value").setParameter("value", ...
Hibernate Query Language(HQL)是一种面向对象的查询语言,其语法与SQL相似但并非完全相同。HQL的设计旨在更好地支持面向对象编程特性,比如继承、多态以及关联等概念。通过HQL,开发人员可以在不牺牲对象模型灵活...
本文将详细探讨HQL中的查询语句,特别是涉及的统计函数和一些关键子句。 首先,`from`子句用于指定查询的源,如`from Person`表示从`Person`持久化类中选取所有实例。为了提高可读性,通常会使用别名,如`from ...
本文将详细介绍HQL中的实体查询,并提供一些实际应用场景。 ##### 示例:TUser 类 假设有一个名为 `TUser` 的类,我们可以通过以下方式来进行实体查询: ```java String hql = "from TUser"; ``` 执行这条语句会...
本篇将重点讲解如何在Hibernate的HQL中执行多对多查询,并通过一个具体的实例来说明。 在Hibernate中,多对多关系是通过中间表(也称为连接表)来实现的。以试题(TmEduExamContent)和分组信息(ClassicCasesGroup...
- **解释**: 在映射文件中定义HQL查询,便于复用和维护。 #### 1.3 HQL的嵌套子查询 ##### 1.3.1 嵌套子查询的概念 - **解释**: 子查询是在另一个查询语句内部的查询,用于增强查询的灵活性和表达能力。 ##### ...
- **统计函数与分组**:在Hql中,`group by`语句用于对数据进行分组,常与聚合函数如`sum()`、`count()`、`max()`等结合使用。例如,你可以选择特定字段进行分组,并计算每个组的总和或计数。 - **约束条件的位置*...
在软件开发领域,尤其是涉及到对象关系映射(ORM)框架如Hibernate时,HQL(Hibernate Query Language)是一种非常重要的查询工具。HQL是Hibernate提供的面向对象的查询语言,它允许开发者以类和属性的方式来查询...
在SQL语言中,`DISTINCT`关键字是一种非常重要的查询方式,它用于消除查询结果中的重复行,从而确保返回的数据是唯一的。本教程将深入探讨如何使用`DISTINCT`查询,以及在不同场景下它的应用。 一、DISTINCT基本...
在HQL中,`from`子句是最基础的查询形式,例如`from Student`,这将返回`Student`类的所有实例。在Java代码中,我们可以使用`session.createQuery()`创建HQL查询,并通过`query.list()`获取结果列表。需要注意的是,...
`Distinct()`方法是C# LINQ中用于去除重复元素的关键操作,而在EFCore中,它可以应用于数据库查询来过滤掉重复记录。 首先,让我们深入理解`Distinct()`方法。在C#中,`Distinct()`方法通过比较元素的默认等价关系...
当我们在查询表中数据时,可能会遇到重复值的情况,这时使用 DISTINCT 关键字可以帮助我们返回唯一的值。 DISTINCT 的基本用法 DISTINCT 关键字可以作用于单列或多列。下面是一个简单的示例: ``` SELECT ...
分页查询** - **语法**: `SET FIRST RESULT <起始位置> SET MAX RESULTS <每页数量>` - **示例**: `Query q = session.createQuery("FROM Category c ORDER BY c.name DESC"); q.setMaxResults(3); q....
from子句是HQL中最基础的部分,用于获取指定类的所有实例。例如,`from Student`将返回所有`Student`类的实例。可以指定别名,如`from Student s`,这里的`s`是`Student`的别名,便于后续操作。需要注意的是,HQL对...
在MySQL数据库中,优化`DISTINCT`操作是一个关键的性能提升策略,特别是在处理大量数据时。上述场景中,用户遇到了一个问题:对一个10G以上的单表`user_access_xx_xx`执行`SELECT COUNT(DISTINCT nick)`以统计唯一...
在Hibernate中进行查询的方式有很多,包括HQL、Criteria API以及Native SQL等。本篇主要关注的是使用Criteria API来进行查询。 ### Criteria API Criteria API是Hibernate提供的一个非常强大的查询工具,它可以...