1 対多の関係で Book と BookProperty の 2 つのエンティティがあります。私はupload_dateでソートされた本を取得する必要があります。英語の本は、ページネーションなどを含むJPA基準を使用して最初に来ます(JPQL/ネイティブSQLはオプションではありません)。
この操作のネイティブ クエリは次のようになります (postgres)。
select distinct
b.book_id,
b.name, b.author, ... ,
b.upload_date,
case when p.property_name='language' and lower(p.property_value)='english'
then 0 else 1 end as book_language,
from books b
left outer join book_properties p
on b.book_id=p.book_id
order by book_language asc, b.upload_date desc;
問題は、基準 API を介して「ケース」部分を選択して並べ替えることができないことです。複数選択とタプルを介して可能であることは知っていますが、アプリケーションでこの列は実際には必要ないため、それは避けたいと思います。(Book、Integer)のタプルではなく、ソートされたBookオブジェクトを取得したいだけです。
case 部分を order by に移動しようとし、JPA Criteria を介してクエリを計算することができましたが、その場合 setDistinct(true) はエラーになりました。そのため、ケース パーツを注文に移動することは選択肢のようには見えません。
できればタプルやラッパー オブジェクトを使用せずに JPA 基準を使用してこのクエリを実装するのを手伝ってください。