以与给定列表相同的顺序从 HQL 查询中获取结果

Get results from HQL query with the same order as given list

我正在尝试使用 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

数据库:PostgreSQL 10.4 休眠:4.3.11.Final

例如。给定的 ID 列表:[3,1,10,4]
实际结果顺序:[1,3,4,10]
预期结果的顺序:[3,1,10,4]

您可以通过在查询中添加关键字 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)

当然你可以用你的变量替换数字 :fingerIds

您可以找到有关该命令的更多信息 hereReturns str 在 str1, str2, str3, ... 列表中的索引(位置)。 Returns 0 如果找不到 str。