私のクエリの結果をフィールドで、そうでなければ別のフィールドで順序付けする必要があります。Java Persistence Criteria API - case式in orderBy()
これは私のコードです:
Expression condizione=cb.isNotNull(root.get(Attribuzione_.dataprincipale));
Expression principale=root.get(Attribuzione_.dataprincipale);
Expression creato=root.get(Attribuzione_.recordcreato);
Order ord=cb.desc(cb.selectCase()
.when(condizione, principale)
.otherwise(creato));
cq=cq.orderBy(ord);
SQLコード内の翻訳は、私が必要とする "順" ではありませんので、このコードはInternal Exception: org.postgresql.util.PSQLException
が発生します。
ORDER BY CASE WHEN (t0.dataprincipale IS NOT NULL) THEN (t0.dataprincipale IS NOT NULL) ELSE t0.rec_creato END DESC
代わりの
ORDER BY CASE WHEN (t0.dataprincipale IS NOT NULL) THEN t0.dataprincipale ELSE t0.rec_creato END DESC
しかし、私はどこに欠陥があるのかわかりませんコード。
提案がありますか? ありがとう
... END';) あなたは ' T0を選択する意味ですか*、CASE(t0.dataprincipaleがNULLされていないとき。 )THEN t0.dataprincipale ELSE t0.rec_creato END AS orderby_data アトリビューションt0 ORDER BY orderby_data' ? Criteria APIで翻訳しようとしています。それは私の最初のアプローチです... ありがとうございました –
SQLは、歴史的にORDER BY列の表現力が制限されています。 JPAは、通常、少し後にSQL方言を実装します。標準SQLに近づくことは、依然として利点があります。 –