`

avoid setParameter for "order by" in JPQL

    博客分类:
  • JEE
阅读更多

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用法

    【EJB3.0查询语句JPQL用法详解】 Java企业版(Java EE)中的EJB3.0引入了一种新的查询语言,即JPQL(Java Persistence Query Language)。JPQL是EJB2中EJB QL的扩展,旨在简化Java应用程序对持久化实体的访问和操作...

    EJB3查询JPQL解析

    【EJB3查询JPQL解析】 Java Enterprise Edition (Java EE) 中的EJB 3.0引入了Java持久性查询语言(JPQL),这是一种专为访问和导航Java应用程序中的实体实例设计的语言。JPQL是对早期EJB QL的扩展和改进,它允许...

    JPA JPQL常用

    同时,`ORDER BY`子句用于指定查询结果的排序。 总的来说,JPA JPQL提供了一种强大的工具,使开发者能够以对象为中心的方式来操作数据库,减少了与底层SQL的交互,提升了开发效率和代码的可读性。熟悉和熟练运用...

    jpql查询[定义].pdf

    JPQL(Java Persistence Query Language)是Java持久化API(JPA)的一部分,它提供了一种面向对象的方式来查询和操作数据库,类似于SQL但更加抽象和通用。JPQL的主要目的是简化数据库操作,使其与对象模型更紧密地...

    JPA之使用JPQL语句进行增删改查

    JPQL语句的基本结构包括select子句、from子句、where子句、order by子句等。 二、JPQL查询语句 JPQL查询语句可以用于检索实体和来自数据库的其他持久化数据。例如,下面是一个简单的JPQL查询语句: ```java List...

    Hibernate框架]Hql语句in中带参数的写法

    Hibernate框架Hql语句in中带参数的写法 Hibernate框架中,在使用HQL语句时,需要传递参数,而在HQL语句中使用in关键字时,需要特别注意参数的传递方式。在本文中,我们将讨论如何在HQL语句中使用in关键字带参数的...

    JPA加载_更新_删除对象及使用JPQL语句进行查询

    本篇文章将深入探讨JPA中的对象加载、更新、删除操作以及如何使用JPQL(Java Persistence Query Language)进行查询,这些都是Java开发者在处理持久化层时不可或缺的知识点。 首先,我们来看JPA的对象加载。JPA提供...

    Hibernate hql查询

    query = session.createQuery("from Customer c order by c.name desc"); customers = query.list(); ``` 这将按客户姓名降序排列。 **6. 分组(GROUP BY)和聚合函数** HQL也支持分组和聚合函数,如`count`, `sum...

    23、Doctrine QueryBuilder对象介绍1

    在这个方法中,`andWhere('p.status = :status')`添加了一个条件,`setParameter('status', $status)`设置了参数值,`orderBy('p.createdAt', 'DESC')`按创建时间降序排序,`setMaxResults(10)`则限制返回最多10条...

    hibernate3.2 (十)HQL查询

    3. 排序:使用`order by`子句可以对查询结果进行排序,如`from User order by age desc`按年龄降序排列用户。 4. 分组:使用`group by`子句进行分组统计,例如`select gender, count(*) from User group by gender`...

    jpa查询详解

    在本文中,我们将详细介绍 JPA 查询的各种方式,包括 JPQL 查询、本地查询和命名查询。 JPQL 查询 JPQL(Java Persistence Query Language)是 JPA 中的一种查询语言,用于书写面向对象的查询语句。JPQL 查询可以...

    Hibernate-HQL-查询-Query资料

    - HQL查询的基本结构与SQL相似,包括SELECT、FROM、WHERE、GROUP BY、ORDER BY等关键字。 - 在HQL中,类名代替了表名,属性名代替了列名。 - 可以使用`new`关键字创建查询结果的新对象实例,进行构造查询。 3. *...

    hibernate语句大全

    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....

    JPA开发手册

    - **排序(Order By)**:在JPQL中使用`ORDER BY`子句。 - **查询部分属性**:只查询特定字段。 - **构造器查询**:使用类的构造函数创建新对象。 - **聚合查询(Aggregation)**:如`SELECT COUNT(e) FROM ...

    Hibernate SQLQuery 本地查询

    for (Map.Entry, Object> entry : params.entrySet()) { query.setParameter(entry.getKey(), entry.getValue()); } return query.list(); } ``` 在这个方法中,我们可以看到如何将参数映射到SQL查询中,以及...

    jpa-开发21

    - `setParameter(int, Object)` 为查询语句的参数赋值,支持位置参数和命名参数。 这些方法使得在 JPA 中处理复杂的查询变得更加简单和统一,减少了与底层数据库的直接交互,提升了代码的可移植性。 总之,JPA ...

    HQL.pdf数据查询语句

    HQL还支持高级查询功能,比如where子句用于添加查询条件,group by子句用于对查询结果进行分组,以及order by子句用于对结果进行排序: ```java // where子句 Query query = session.createQuery("from User where ...

    Hibernate HQL详解.docx

    例如,`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. *...

    Hibernate 查询经典练习题

    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();...

Global site tag (gtag.js) - Google Analytics