Query query = session.createQuery("select new User"
+" (u.id,u.name,"
+"(case when u.code=1340 then 1 when u.code = 1345 then 2 else 0 end)"
+")"
+" from User u order by col_2_0_");
List list = query.list();
上面代码能看懂吧!我最后order by col_2_0_显然不能这么写.要给我(case when u.code=1340 then 1 when u.code = 1345 then 2 else 0 end)这列起别名.但是我是new User(... , ... , ..)这么写的,怎么能起别名啊!我写成下面这样不起作用啊
Query query = session.createQuery("select new User"
+" (u.id,u.name,"
+"(case when u.code=1340 then 1 when u.code = 1345 then 2 else 0 end)"
+ as c"
                                        +")"
+" from User u order by c");
List list = query.list();

解决方案 »

  1.   


    Query   query   =   session.createQuery( "select   new   User " 
    + "   (u.id,u.name, " 
    + "(case   when   u.code=1340   then   1   when   u.code   =   1345   then   2   else   0   end) " 
    + ") " 
    + "   from   User   u   order   by   u.code "); 
    List   list   =   query.list(); 这样可以的吧。
      

  2.   

    可以试试
    select 后不用new Object,而是写字段。取结果用Object[] obj = (Object[])list.get(i);
      

  3.   

    (u.id,u.name, " 
    + "(case   when   u.code=1340   then   1   when   u.code   =   1345   then   2   else   0   end) " 
    + ") " 
    中的括号去掉,改为:select   u.id,u.name, (case   when   u.code=1340   then   1   when   u.code   =   1345   then   2   else   0   end)  from   User   u   order   by    u.code;