1

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 基準を使用してこのクエリを実装するのを手伝ってください。

4

0 に答える 0