1

SQLで問題が発生しました。

これが私のネイティブ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、A1ucard

4

2 に答える 2

0

現在、Hibernate をインストールしていませんが、これでうまくいくはずです。

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

これは、where 句のに順序を指定するため、より「標準的な」SQL の記述方法です。

編集:

少なくともHQLを使用しない限り、あなたが望むことをする方法はないようです。Postgres には、HQL よりもはるかに強力な ORDER BY 句があります。

select句に関するPostgresのドキュメントには「ORDER BY」があり、式には独自のドキュメントページがあります。

一方、Hibernate のorder by 句は非常に限られています。列を並べ替えたり、通常の関数または集計関数を使用したりできます。

ディール キラーは次の文です。

group by 句にも order by 句にも算術式を含めることはできません。

したがって、必要な結果セットを取得したい場合は、ネイティブ SQL を使用する必要があります。

于 2012-09-14T13:34:06.177 に答える
0

私は PostreSQL の構文にあまり詳しくありませんが、

balance <= b 

部分は近くにある必要があります。HQL では、Postgre SQL 固有の構文を適用できません。

于 2012-09-14T13:36:12.117 に答える