通过改变JPQL / Hibernate中的列进行排序

时间:2010-11-17 11:37:00

标签: java sql hibernate jpa jpql

我有一个Sessions表。每个会话都有“session_start_time”和“session_end_time”。会话打开时,结束时间为空。我想获取会话列表,并按以下逻辑对其进行排序:

  1. 如果会话已开启(无结束时间),请按开始时间排序。
  2. 如果会话已结束,请按结束时间排序。
  3. 类似的东西:

     ORDER BY (session_end_time == null) ? session_start_time : session_end_time
    

    我正在使用JPA和JPQL进行查询,并使用Hibernate执行。你会推荐什么?

    注意:我不想将CASE添加到SELECT中,而是将其保持清洁,以便获得没有其他不需要的字段的会话列表。

2 个答案:

答案 0 :(得分:1)

确实

ORDER BY CASE 
    WHEN session_end_time IS NULL THEN session_start_time 
    ELSE session_end_time 
END 

在您的DBMS中工作?这不会添加字段。

否则,您可以在嵌套查询中计算它,但不要将其包含在最终的SELECT子句中:

SELECT field1, field2 FROM (
    SELECT field1, field2, CASE WHEN session_end_time... END AS dummyfield
) Q
ORDER BY Q.dummyfield

答案 1 :(得分:1)

ORDER BY nvl(session_end_time,session_start_time)

nvl是一个Oracle函数。我确信其他DBMS的功能类似于

发现这个用于休眠: nIBl in HIBERNATE:How to simulate NVL in HQL

ORDER BY:https://forum.hibernate.org/viewtopic.php?f=25&t=997220&start=0