我在一对多的关系中有2个实体Book和BookProperty。我需要检索按upload_date排序的书籍,英语语言书籍首先使用JPA Criteria和分页和填充(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)的元组。
我尝试将案例部分移动到订单中并设法通过JPA Criteria计算查询,但在这种情况下,setDistinct(true)导致错误,因为按顺序的所有列必须是distinct的一部分。因此,将案例部分移动到订单看起来不是一种选择。
请帮助我使用JPA Criteria实现此查询,最好不使用元组或包装器对象,但如果没有其他选项,那也可以。