我正在尝试使用HQL进行查询,该查询将保持与给定ID列表相同的顺序。我知道SQL可以实现,但是我找不到用HQL做到的任何方法(而且我无法使用本地SQL做到这一点,因为我有很多连接)
示例
fingerIds = [3,1,10,4]
SELECT p FROM People p
JOIN FETCH p.fingers f
WHERE f.id IN :fingerIds
DB:PostgreSQL 10.4 休眠:4.3.11.Final
例如。给定的ID列表:[3,1,10,4]
实际结果的顺序:[1,3,4,10]
预期结果的顺序:[3,1,10,4]
答案 0 :(得分:1)
在示例中,您可以通过在查询中添加关键字FIELD
来获得订单:
SELECT p FROM People p
JOIN FETCH p.fingers f
WHERE f.id IN :fingerIds
ORDER BY FIELD(f.ID,3,1,10,4)
Ofc,您可以将数字替换为变量:fingerIds
您可以找到有关该命令here的更多信息。 返回str1,str2,str3,...列表中str的索引(位置)。如果找不到str,则返回0。