将字符串原始查询的OrderBy列表转换为jpa查询



表:

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查询,但找不到任何方法。请帮助我!

注意:我使用的环境

  • MySQL版本:8.0.25
  • 弹簧引导版本2.5
  • Java 11

更新1:条件FIELD(代码、"健康"、"电话"、"冻结"、"热"(应为列表。我还想在将这个原始查询转换为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查询由一个准备好的语句支持,查询的结构(但不是文字值(必须经过硬编码和修复。

最新更新