将 String 原始查询的 OrderBy 列表转换为 jpa 查询

Convert OrderBy list of String raw query to jpa query

Table:

ID  Code
1   Health
2   Freeze
3   Phone
4   Phone
5   Health
6   Hot

按字符串原始查询列表排序:

select * from table 
order by FIELD(Code, 'Health', 'Phone', 'Freeze', 'Hot')

我想将此原始查询转换为 JPA 查询,但找不到任何方法。请帮助我!

注意:我使用的环境

更新 1:条件 FIELD(Code, 'Health', 'Phone', 'Freeze', 'Hot') 应该是一个列表。我还想在将此原始查询转换为 JPA 查询时传递一个列表

更新 2:感谢@TimBiegeleisen 的回答和评论,我意识到 JPA 不适合我的问题。

您拥有的 FIELD 表达式,特别是 MySQL,可以使用 CASE 表达式在 ANSI SQL 中重写:

ORDER BY CASE WHEN Code = 'Health' THEN 1
              WHEN Code = 'Phone'  THEN 2
              WHEN Code = 'Freeze' THEN 3
              WHEN Code = 'Hot'    THEN 4 END

我们可以使用以下 JPA 查询:

SELECT e, (CASE WHEN e.Code = 'Health' THEN 1
                WHEN e.Code = 'Phone'  THEN 2
                WHEN e.Code = 'Freeze' THEN 3
                WHEN e.Code = 'Hot'    THEN 4 END) AS ord
FROM Entity e
ORDER BY ord

正如我在上面的评论中提到的,您将需要一个固定的 CASE 表达式。您不能将 Java 字符串列表转换为 JPA 查询中需要的 CASE 表达式。 JPA 查询由准备好的语句支持,查询的结构(但不是文字值)必须进行硬编码和修复。