使用case时计算的临时列的顺序

时间:2013-04-13 14:14:32

标签: java hibernate jpa criteria criteria-api

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

0 个答案:

没有答案