2014-10-07 241 views
0

我有一个实体HQL顺序:的情况下

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

我必须得到有序的用户为了: ORDER BY组名,如果用户是头部,然后第一个(头部不仅仅意味着head.id = ID)。

我使HQL查询:select u from User u order by u.group_name, case when u = head then 0 else 1; 但它不工作;

在结果,我想有: (GROUP_NAME:用户)

  1. G1约翰(头)
  2. G1詹姆斯
  3. G1亚当
  4. G2布莱恩(头)
  5. g2 Martin

如何进行正确的HQL查询?

+1

不清楚的问题,给予更多的细节,并给予表结构,如果可能的话。 – 2014-10-07 11:26:41

+0

http://stackoverflow.com/questions/9262413/hibernate-dynamic-order – Stefan 2014-10-07 11:36:49

+0

尝试“当u.id = head.id” – 2014-10-09 11:03:38

回答

0

这里是HQL查询:

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

我没有得到你想从用户正是因为在用户类中没有列名,这样就可以在选择部分包括。

+0

对不起,但我有一个按名称排列的组列表 – idmitriev 2014-10-07 11:43:15

+0

哦只是编辑按订单组通过 – 2014-10-07 11:44:21

+0

我你的情况,我只是头用户,但我想得到的不是头用户以及 – idmitriev 2014-10-07 11:53:53

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 

正如你可以看到,我使用的情况下,语句来创建属性为h,它取值1,当有人是一组头,否则返回0。然后你可以下降,这意味着每个组的头部被列在组的其他成员之前。