HQL按个案排序

时间:2014-10-07 11:25:32

标签: java hibernate hql

我有一个实体:

class User{
    Long id;
    String group_name;
    User head;        
}

我必须按顺序订购用户: 按group_name排序,如果用户首先是头部(头部比head.id = id)。

我制作HQL查询:select u from User u order by u.group_name, case when u = head then 0 else 1; 但它没有用;

结果我希望: (group_name:user)

  1. g1 John(头)
  2. g1詹姆斯
  3. g1 Adam
  4. g2 Brian(头)
  5. g2 Martin
  6. 如何进行正确的HQL查询?

2 个答案:

答案 0 :(得分:0)

这是HQL查询:

"select u.group_name from User u, User.head head where head.id=u.id order by u.group_name"

由于User类中没有列名,因此我无法从用户那里获得您想要的内容,以便您可以包含在选择部分中。

答案 1 :(得分:0)

我会在没有分组的情况下执行此操作,方法是使用case语句创建第二个属性,您可以通过该属性来确定某人是否是某个组的负责人。例如:

select name,group_name,case when head.id is not null then 1 else 0 end as h 
from User 
order by group_name asc,h desc

正如你所看到的,我使用了一个case语句来创建一个属性h,当某人是某个组的头时,该属性h取值为1,否则为0。然后你可以按照降序进行订购,这意味着每个组的负责人都会在该组的其他成员之前列出。