gpt4 book ai didi

sql-order-by - 如何在 JPQL 中编写按表达式排序

转载 作者:行者123 更新时间:2023-12-04 13:29:24 25 4
gpt4 key购买 nike

PostgreSQL 和 MySQL 提供将表达式写入 ORDER BY SQL 查询中的子句。它允许按某些列对项目进行排序,但特殊值位于顶部。 SQL 看起来像这样。 (在 Postgres 中工作)

select * from article order by id = 4, id desc;

现在我想用 JPQL 编写它,但它不起作用。我的尝试是:
@NamedQuery(name = "Article.special", query = "SELECT a FROM Article a ORDER BY ( a.id = :id ) DESC, a.id DESC")

这是带有 Hibernate 驱动程序的 JPA 1.0。应用程序服务器在部署时抛出此异常。
ERROR [SessionFactoryImpl] Error in named query: Article.special
org.hibernate.hql.ast.QuerySyntaxException: unexpected AST node: = near line 1, column 73 [SELECT a FROM cz.cvut.fel.sk.model.department.Article a ORDER BY ( a.id = :id ) DESC, a.id DESC]
at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:54)

非常感谢。

最佳答案

对于命名查询, (ORDER BY ( a.id = :id ) 或 ORDER BY (:id )) 将不起作用,因为 DSC/ASC 无法在运行时参数化。

1) 如果排序元素在运行时变化,则采用动态方式。

String query = "SELECT a FROM Article a ORDER BY "+orderElement+" DESC, a.id DESC";
entityManager.createQuery(query).getResultList();

2) 如果排序元素是固定的,则实体 bean 中的静态方式。

场级:
@OrderBy("id ASC")
List<Article> articles;

方法级别:
@OrderBy("id DESC")
public List<Article> getArticles() {...};

关于sql-order-by - 如何在 JPQL 中编写按表达式排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4378834/

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