目前在修改一个订购系统,发现里边合同列表的排序有问题,公司里用的是JPQL,数据库用的是sqlserver2005.   以下是查询语句和枚举类的定义
Query query = em.createQuery("SELECT c FROM Contract c " + sql
+ " ORDER BY c.state,c.addDate,c.billNo,c.id");public enum ContractState {
//{"拟定合同【采购人】","审核合同【分管科长】","签订合同【厂商】","复核合同【采购人】","审批合同【分管主任】"};
/**合同拟定*/
EDIT,
/**合同审核*/
CHECK,
/**主任审批*/
APPROVE,
/**合同发送*/
SEND,
/**供应商签字*/
SIGN,
/**装备办签字*/
GOVSIGN,
/**已签*/
SIGNED,
/**待结算*/
ACCOUNTS,
/**合同完成*/
COMPLETE,
/**合同作废*/
CANCEL;
c.state 就是ContractState,按说这个order by应该是按照枚举类型的序列排序吧?但是目前发现结果是按照state的字母顺序排序的,也就是ACCOUNTS、APPROVE、CANCEL这样排序的。网上查了半天也不知道是为什么,希望哪位高手可以告诉我原因,还有如何可以让order by按照定义的序列排序。先谢过了JavaJPQL

解决方案 »

  1.   

    Query query = em.createQuery("SELECT c.state,c.addDate,c.billNo,c.id FROM Contract c " + sql
                        + " ORDER BY <span style="color: #FF0000;">c.state</span>,c.addDate,c.billNo,c.id");
      

  2.   


    感谢回复,
    但是我的Contract里还有很多其它内容啊,只查这几个不够用哇
      

  3.   

    JPQL就是这样查的哇,是面向对象的查询语句
      

  4.   

    ORDER BY这个用法:ORDER BY 语句用于根据指定的列对结果集进行排序。
    ORDER BY 语句默认按照升序对记录进行排序。
    如果您希望按照降序对记录进行排序,可以使用 DESC 关键字。
      

  5.   


    看来你没有明白我的意思,我希望按照我这个ContractState类型定义的顺序排序,也就是ordinal()的顺序排序,但是现在的结果是按照ContractState的字母顺序排序的:ACCOUNTS->APPROVE->CANCEL...这样排列的
      

  6.   

    排序跟ORM框架没关系, 如果你数据库里面存的是枚举对应的0,1,2,3...那么排序就是按照你想要的顺序排的.  你的情况应该数据库里面存的是字符串吧ORM框架只复制翻译sql, 就是说他会翻译为order by [table_name.filed_name] 所以你排序还是依照filed_name的类型
      

  7.   


    感谢你的回答!
    明白了,为了在数据库里容易辨认确实存的是字符串。
    那现在有没有方法能够实现按照定义的顺序排?最好能不需要修改枚举项的名字,改动太大。。
    数据库层是做不到的,如果你这是分页后的结果,自己在java代码里面手动排一下问题也不大的
      

  8.   


    感谢你的回答!
    明白了,为了在数据库里容易辨认确实存的是字符串。
    那现在有没有方法能够实现按照定义的顺序排?最好能不需要修改枚举项的名字,改动太大。。
    数据库层是做不到的,如果你这是分页后的结果,自己在java代码里面手动排一下问题也不大的
    好的,谢谢回答,先结贴了!么么哒