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");
List list = query.list();这是sql
select user0_.id as col_0_0_, user0_.name as col_1_0_, case when user0_.code=1340 then 1 when user0_.code=1345 then 2 else 0 end as col_2_0_ from User user0_就是说查询出三列,最后一列是case when语句出来的一列.我现在就想用这列排序!怎么办啊?order by谁啊?
比如我想排序id 就写order by u.id 那我想排序最后这列呢?是不是要起别名啊?怎么做?

解决方案 »

  1.   

    我说按照最后那列排序!!!就是排序case when 那列
      

  2.   

    可定义一个User的属性,比如userNbr, 然后,
    定义code:public void setCode(int code) {
       this.code = code;   //给userNbr赋值
       if (this.code == 1340) {
           userNbr = 1
       }
       else {
           //其余略,类似
       }}
    然后,可以用Query query = session.createQuery("select new User"
                        +" (u.id,u.name)"
                        +"from User u"
                        +"order by u.userNbr"
      

  3.   

    as不好用
    大概是因为你的User类里并没有定义你case对应的列
    也就是User里需要按照7#那样定义一个属性来接着你select出来的case语句的结果你的User类本身不含有那个结果
    所以你需要这样弄否则你调用的new User(,,,,)会不匹配而导致hibernate失败的你是否有注意你在select的时候
    其他的都是u.XXX啊
    呵呵要不你就是用SQL语句也行啊加油
    祝你成功
      

  4.   

    hibernate查询实体需要使用别名