【问题标题】:JPA query ordering by nested property when it is null嵌套属性为空时的JPA查询排序
【发布时间】:2025-12-17 22:05:02
【问题描述】:

我想按category.sortOrder 对我的新闻进行排序,但有时类别为空,因此这些值会被过滤掉。我发现:

 ORDER BY news.categoryCountry nulls first

可以不过滤掉结果,但它们仍然没有按categoryCountry.sortorder排序

我试过这个:

ORDER BY news.categoryCountry nulls first, news.categoryCountry.sortOrder nulls first

或者

ORDER BY CASE 
WHEN (news.categoryCountry is NULL) 
THEN news.categoryCountry 
ELSE news.categoryCountry.sortOrder 
END
nulls first

还是不行。总是过滤掉空值

【问题讨论】:

    标签: sql spring-boot jpa spring-data-jpa


    【解决方案1】:

    如果它不起作用,那么您需要一个表达式和一列,如下所示:

    ORDER BY CASE WHEN news.categoryCountry is NULL THEN 0 ELSE 1 end, 
             news.categoryCountry.sortOrder nulls first
    

    【讨论】:

    • 还是不行。它正在过滤出带有null 值的结果categoryCountry :(
    • 排序依据不过滤记录。