Spring & JPA:按值排序,如果为 null 则取其他值

unk*_*404 6 sorting jpa spring-data-jpa

实体  

编号 | ... | 特别(整数) | 默认值(整数)NOT NULL  
-------------------------------------------------
10 | 10 ... | 空 | 100  
11 | 11 ... | 85 | 85 90  
12 | 12 ... | 40| 80  
13 | ... | 空 | 70

这应该在 spring 中排序,如果不为空,则取“special”列的值,否则取“default”列的值

如果我用 Sort.by("special", "default") 对它进行排序,它将产生两个(虚构的)组:

12 (40)
11 (85)
13 (70)
10 (100)

但它应该是:

12 (40)
13 (70)
11 (85)
10 (100)

tl;dr:如何排序“如果不为空,则取此值,否则,取不同列的值”

cri*_*zis -1

所以,本质上你想要ORDER BY CASE WHEN special IS NOT NULL THEN special ELSE default END

TryJpaSort.unsafe("CASE WHEN ...")而不是Sort.by(...),它接受任意表达式而不是属性名称。

(顺便说一句COALESCE(special, default),也许也可以,但我不确定,你需要检查一下)