当前位置: 首页 > 知识库问答 >
问题:

无法多次使用时的hql情况

柳韬
2023-03-14

我需要在hql查询中为order by设置条件。

  1. 排序方式(列名)
  2. 排序器(asc或desc)

在我的hql查询中,有3个表正在联接

select a from TableA a, TableB b, TableC c WHERE a.column1 = b.column2 AND b.column1 = c.column2 ORDER BY CASE WHEN :sortBy = column3 THEN a.column3 WHEN :sortBy = column4 THEN b.column4 ELSE c.column5 END CASE WHEN :sortOrder = 'asc' THEN asc ELSE desc END

在此查询中,我在第二个CASE WHEN条件下遇到错误

我也试过通过下面查询

select a from TableA a, TableB b, TableC c WHERE a.column1 = b.column2 AND b.column1 = c.column2 ORDER BY CASE WHEN :sortBy = column3 THEN (CASE WHEN :sortOrder = 'asc' THEN 'a.column3 asc' ELSE 'a.column3 desc' END) WHEN :sortBy = column4 THEN (CASE WHEN :sortOrder = 'asc' THEN 'b.column4 asc' ELSE 'b.column4 desc' END) ELSE (CASE WHEN :sortOrder = 'asc' THEN 'c.column5 asc' ELSE 'c.column5 desc' END) END

在此查询中,响应未按顺序排列

你能告诉我这个问题有什么问题吗?

共有1个答案

祁嘉瑞
2023-03-14

排序依据子句中的大小写表达式需要用逗号分隔。但是,您似乎希望能够根据参数sortOrder选择排序方向。一种方法是与大小写表达式相乘,该表达式生成升序为1.0,降序为-1.0。

SELECT a from TableA a, TableB b, TableC c
WHERE a.column1 = b.column2 AND b.column1 = c.column2
ORDER BY
    (CASE WHEN :sortOrder = 'asc' THEN 1.0 ELSE -1.0 END) *
    CASE WHEN :sortBy = column3 THEN a.column3
         WHEN :sortBy = column4 THEN b.column4
         ELSE c.column5 END;
 类似资料:
  • 问题内容: 我正在尝试使用的功能同时划分工作。当我使用以下代码时,它可以正常工作: 但是,当我以更加面向对象的方式使用它时,它将无法正常工作。它给出的错误信息是: 这是我的课: 任何人都知道问题可能是什么,或解决问题的简单方法? 问题答案: 问题在于,多处理必须使进程中的东西腌制,而绑定的方法却不能腌制。解决方法(无论你是否认为它“容易” 是向你的程序中添加基础结构,以允许对这些方法进行腌制,并使

  • 我正在制作一个小型2D引擎,并决定使用分离轴定理进行实践。我对玩家对象进行了碰撞检测和平移,但当游戏与多个对象发生碰撞时,会停止玩家的移动。下面是我的问题的一个例子: 玩家沿着墙移动,同时向下和向右推动自己。一旦玩家到达两个瓷砖之间的交叉点,他就不能再向下移动,因为他下面的瓷砖检测到碰撞,会在他右边的瓷砖直接将他推到左边之前将玩家推起来。我相信问题是玩家下面的瓷砖在另一个瓷砖之前正在测试碰撞,但我

  • 我是Hibernate的新手,希望实现Hibernate条件或hql来查询多个表以获得结果,但我在这方面遇到了问题。。现在,我在hibernate中使用原生sql来完成我需要的任务,但我想用hql/criteria尝试一下。。下面是我用来获取结果的本机查询。。 下面是我的实体pojo类 表1: 表2: 表3: 表4: 我还没有实现pojo类中表之间的映射,我很难理解这一点。。所以我要向社区寻求帮助

  • 问题内容: 我想我在这里描述的可能有个名字,但我不知道。所以我的第一个问题是要知道这种技术的名称。 这是一个示例:假设您正在网页上实现实时搜索。每次用户在搜索框中键入内容时,您都会触发一个新的搜索查询,并且结果会尽可能频繁地更新。这是一件愚蠢的事情,因为您发送的查询会超出实际需要。每2-3个字母发送一次请求,或者每100 ms最多发送一次请求就足够了。 因此,一种技术是安排在键入键之后立即执行的查

  • 还要注意,如果我没有immediate=“true”,那么DB命中在阶段2、3、4和6中各发生4次。 我不知道为什么会这样。你能帮个忙吗。 开始阶段RESTORE_VIEW 1 结束阶段RESTORE_VIEW 1 开始阶段APPLY_REQUEST_VALUES 2 获取排序->订单业务->未排序 获取排序->订单区域->未排序 获取排序->订单策略->未排序 排列不可用 行走->开始 DB命中

  • 那么当我使用调用异步方法时会发生什么呢?整个方法的操作会以同步的方式完成吗?例如,如上面所示,我在中有三个异步操作;、&,那么它们是否会以同步方式执行,因为我使用.wait()调用ScanAsync方法?