3
PostgreSQLとMySQLは、SQLクエリの式ORDER BY
に式を書き込むことを提案しています。これは、項目をいくつかの列で並べ替えることができますが、特別な値は上部にあります。 SQLはこのように見えます。 (Postgresで動作します)JPQLでの式による注文
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)
ありがとうございます。
'orderElement'は何を意味するのでしょうか?それは列の名前だけであるか、それとも表現式にすることができますか?したがって、最初のオプションはネイティブクエリを使用していますか?私はそれを望んでいない。そして2番目のオプションは良いです、私はそれを知っていますが、私の問題を解決していません。 – Gaim
'orderElement'は、指定されたクエリで(:id)のような結果を並べ替えるために渡される単なるパラメータです。私が提供したクエリはネイティブクエリではなく、動的に作成するだけです。 –