假设我们有一个这样的 NAME 表:
PERSON_ID PART_TYPE VALUE
并且PERSON_ID
是对 的外键引用PERSON
。
内部PART_TYPE
将是诸如FAMILY
, GIVEN
, PREFIX
,SUFFIX
等的值。值自然是实际值。
你将如何编写一个 SQL 查询(更不用说 Hibernate)来让 this 按 排序PART_TYPE
,然后按VALUE
for排序,FAMILY
PART_TYPE
然后按VALUE
for排序GIVEN
PART_TYPE
?
考虑一下你有这三个人的场景:
Given3 Family10
Given5 Family10
Given7 Family10
使用此 SQL:
SELECT this_.person_id, name1_.part_type, name1_.value
FROM person this_
LEFT OUTER JOIN name name1_
ON this_.person_id =name1_.person_id
ORDER BY (
CASE
WHEN name1_.PART_TYPE = 'FAMILY'
THEN 0
WHEN name1_.PART_TYPE = 'GIVEN'
THEN 1
END),
name1_.VALUE,
我得到:
ID2 FAM Family10
ID1 FAM Family10
ID3 FAM Family10
ID4 GIV Given3
ID5 GIV Given5
ID6 GIV Given7
我想:
ID1 FAM Family10
ID2 FAM Family10
ID3 FAM Family10
ID4 GIV Given3
ID5 GIV Given5
ID6 GIV Given7
因此,当前状态下的那些 Family10 行的顺序是不确定的——它可以是 ID1、ID2 和 ID3 的任意组合。我希望它们根据给定值排序。我真的不确定如何做到这一点,即使有多个选择语句。
我想这样做的原因是因为我想获取这些人员 ID,并且我可以在我的末端进行一些过滤以获取不同的人员 ID 并对其执行一些分页逻辑,然后实际加载人员(从而减少很多SQL 调用)。我目前无法更改数据库架构。