我有 2 个实体 Book 和 BookProperty 处于一对多关系中。我需要检索按 upload_date 排序的书籍,英语书籍首先使用 JPA 标准和分页和东西(JPQL/native 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 对象,而不是(Book,Integer)的元组。
我试图将 case 部分移入 order by 并设法通过 JPA Criteria 计算查询,但在这种情况下 setDistinct(true) 会导致错误,因为 order by 中的所有列都必须是 distinct 的一部分。因此,将机箱部件移至订单看起来不是一种选择。
请帮助我使用 JPA Criteria 实现此查询,最好不使用元组或包装器对象,但如果没有其他选项也可以。