以与给定列表相同的顺序从 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
您可以找到有关该命令的更多信息 here。
Returns str 在 str1, str2, str3, ... 列表中的索引(位置)。 Returns 0 如果找不到 str。
我正在尝试使用 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
您可以找到有关该命令的更多信息 here。 Returns str 在 str1, str2, str3, ... 列表中的索引(位置)。 Returns 0 如果找不到 str。