代码之家  ›  专栏  ›  技术社区  ›  Eldad Mor

按jpql/hibernate中的不同列排序

  •  3
  • Eldad Mor  · 技术社区  · 15 年前

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

    1. 如果会话打开(没有结束时间),则按开始时间排序。
    2. 如果会话已关闭,则按结束时间排序。

    比如:

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

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

    注释 :我不想向select添加case,而是保持它的干净,这样我就可以得到一个没有其他不需要字段的会话列表。

    2 回复  |  直到 15 年前
        1
  •  1
  •   Community Mohan Dere    9 年前

    按NVL排序(会话结束时间、会话开始时间)

    nvl是一个Oracle函数。我相信其他DBMS也有类似的功能

    找到这个休眠: NVL处于休眠状态: How to simulate NVL in HQL

    订购人: https://forum.hibernate.org/viewtopic.php?f=25&t=997220&start=0

        2
  •  1
  •   littlegreen    15 年前

    做

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

    在你的数据库管理系统中工作?这不会添加字段。

    否则,可以在嵌套查询中计算它,但不要将其包含在最终查询中。 SELECT 条款:

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