you might want to create a JPQL like this:
String sql = "select distinct s from Student s order by :orderByColumn asc" Query query = em.createQuery(sql); query.setParameter("orderByColumn", "name"); return query.getResultList();
However, the "order by" parameter might not be set properly with some implementations, especially with the "distinct" keyword in the select clause.
So generally you would have two solutions for this:
1. use dynamic jpql, based on passed sorting requirement, for "order by"
String sql = "select distinct s from Student s"; if(sortByName) { sql += " order by s.name asc"; } else if(sortByMob) { sql += " order by s.mobile asc"; } Query query = em.createQuery(sql); //query.setParameter("orderByColumn", "name"); return query.getResultList();
2. sorting the returned list in your application, rather than in the query.
One last thing to mention: The "asc/desc" cannot be set as parameters (not tested though)
hope this can save you a few hours ... (-;
相关推荐
【EJB3.0查询语句JPQL用法详解】 Java企业版(Java EE)中的EJB3.0引入了一种新的查询语言,即JPQL(Java Persistence Query Language)。JPQL是EJB2中EJB QL的扩展,旨在简化Java应用程序对持久化实体的访问和操作...
【EJB3查询JPQL解析】 Java Enterprise Edition (Java EE) 中的EJB 3.0引入了Java持久性查询语言(JPQL),这是一种专为访问和导航Java应用程序中的实体实例设计的语言。JPQL是对早期EJB QL的扩展和改进,它允许...
同时,`ORDER BY`子句用于指定查询结果的排序。 总的来说,JPA JPQL提供了一种强大的工具,使开发者能够以对象为中心的方式来操作数据库,减少了与底层SQL的交互,提升了开发效率和代码的可读性。熟悉和熟练运用...
JPQL(Java Persistence Query Language)是Java持久化API(JPA)的一部分,它提供了一种面向对象的方式来查询和操作数据库,类似于SQL但更加抽象和通用。JPQL的主要目的是简化数据库操作,使其与对象模型更紧密地...
JPQL语句的基本结构包括select子句、from子句、where子句、order by子句等。 二、JPQL查询语句 JPQL查询语句可以用于检索实体和来自数据库的其他持久化数据。例如,下面是一个简单的JPQL查询语句: ```java List...
Hibernate框架Hql语句in中带参数的写法 Hibernate框架中,在使用HQL语句时,需要传递参数,而在HQL语句中使用in关键字时,需要特别注意参数的传递方式。在本文中,我们将讨论如何在HQL语句中使用in关键字带参数的...
本篇文章将深入探讨JPA中的对象加载、更新、删除操作以及如何使用JPQL(Java Persistence Query Language)进行查询,这些都是Java开发者在处理持久化层时不可或缺的知识点。 首先,我们来看JPA的对象加载。JPA提供...
query = session.createQuery("from Customer c order by c.name desc"); customers = query.list(); ``` 这将按客户姓名降序排列。 **6. 分组(GROUP BY)和聚合函数** HQL也支持分组和聚合函数,如`count`, `sum...
在这个方法中,`andWhere('p.status = :status')`添加了一个条件,`setParameter('status', $status)`设置了参数值,`orderBy('p.createdAt', 'DESC')`按创建时间降序排序,`setMaxResults(10)`则限制返回最多10条...
3. 排序:使用`order by`子句可以对查询结果进行排序,如`from User order by age desc`按年龄降序排列用户。 4. 分组:使用`group by`子句进行分组统计,例如`select gender, count(*) from User group by gender`...
在本文中,我们将详细介绍 JPA 查询的各种方式,包括 JPQL 查询、本地查询和命名查询。 JPQL 查询 JPQL(Java Persistence Query Language)是 JPA 中的一种查询语言,用于书写面向对象的查询语句。JPQL 查询可以...
- HQL查询的基本结构与SQL相似,包括SELECT、FROM、WHERE、GROUP BY、ORDER BY等关键字。 - 在HQL中,类名代替了表名,属性名代替了列名。 - 可以使用`new`关键字创建查询结果的新对象实例,进行构造查询。 3. *...
Query query = session.createQuery("from Customer as c ORDER BY c.name ASC, c.age DESC"); List<Customer> customers = query.list(); ``` - QBC方式: ```java Criteria criteria = session....
- **排序(Order By)**:在JPQL中使用`ORDER BY`子句。 - **查询部分属性**:只查询特定字段。 - **构造器查询**:使用类的构造函数创建新对象。 - **聚合查询(Aggregation)**:如`SELECT COUNT(e) FROM ...
for (Map.Entry, Object> entry : params.entrySet()) { query.setParameter(entry.getKey(), entry.getValue()); } return query.list(); } ``` 在这个方法中,我们可以看到如何将参数映射到SQL查询中,以及...
- `setParameter(int, Object)` 为查询语句的参数赋值,支持位置参数和命名参数。 这些方法使得在 JPA 中处理复杂的查询变得更加简单和统一,减少了与底层数据库的直接交互,提升了代码的可移植性。 总之,JPA ...
HQL还支持高级查询功能,比如where子句用于添加查询条件,group by子句用于对查询结果进行分组,以及order by子句用于对结果进行排序: ```java // where子句 Query query = session.createQuery("from User where ...
例如,`SELECT age, COUNT(age) num FROM User WHERE age>10 GROUP BY age HAVING COUNT(age)>1 ORDER BY num DESC`。HAVING子句用于过滤分组后的结果,注意别名在HAVING中不能直接使用,但在ORDER BY中可以。 6. *...
String hql = "SELECT s.ename, s.empno FROM Emp s ORDER BY s.empno"; List[]> list = session.createQuery(hql) .setFirstResult(page - 1) // 第几页减1 .setMaxResults(num) // 每页显示的记录数 .list();...