gpt4 book ai didi

java - HQL 按条件排序

转载 作者:行者123 更新时间:2023-12-01 05:08:12 25 4
gpt4 key购买 nike

我遇到了 SQL 问题。

假设这是我的 native SQL:

SELECT * FROM products 
ORDER BY balance <= bottleneck DESC, product_code ASC

这是在 postgressql 上运行的。但它不适用于 HQL。我的HQL如下:

from Products as p order by  p.balance < p.bottleneck desc, p.productCode asc

我遇到了如下异常:

Exception in thread "main" org.hibernate.hql.ast.QuerySyntaxException: unexpected AST node: < near line 1, column 67 [from com.inventory.inventory.vo.Products as p order by  p.balance < p.bottleneck]
at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:54)
at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:47)
at org.hibernate.hql.ast.ErrorCounter.throwQueryException(ErrorCounter.java:82)
at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:261)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:185)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:101)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:98)
at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156)
at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135)
at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1760)
at com.inventory.inventory.dao.impl.ProductsDAOImpl.getProducts(ProductsDAOImpl.java:72)
at Main.main(Main.java:43)

有什么办法可以解决这个问题吗?

非常感谢您的帮助。

谢谢,最佳 rgds,A1u卡

最佳答案

我现在还没有安装 Hibernate,但这应该可以:

from Products as p where p.balance < p.bottleneck order by p.bottlenec desc, p.productCode asc

这是一种更“标准”的 SQL 编写方式,因为您将命令放在 where 子句之后

编辑:

似乎没有办法做你想做的事,至少不使用 HQL。 Postgres 具有比 HQL 更强大的 ORDER BY 子句。

Postgres documentation on select clause具有“ORDER BY 表达式”,其中表达式具有 it's own documentation page .

另一方面,Hibernate 的 order by clause是非常有限的。它允许您对列进行排序并使用常规或聚合函数。

交易 killer 就是这句话:

Neither the group by clause nor the order by clause can contain arithmetic expressions.

所以,看来你运气不好,如果你想获得你需要的结果集,你必须使用原生 SQL。

关于java - HQL 按条件排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12425587/

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