1

我有 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 实现此查询,最好不使用元组或包装器对象,但如果没有其他选项也可以。

4

0 回答 0