日期:2014-05-18  浏览次数:20712 次

问一个有JPQL order by 枚举类型的问题!!
目前在修改一个订购系统,发现里边合同列表的排序有问题,公司里用的是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按照定义的序列排序。先谢过了
Java JPQL

------解决方案--------------------
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");
------解决方案--------------------
排序跟ORM框架没关系, 如果你数据库里面存的是枚举对应的0,1,2,3...那么排序就是按照你想要的顺序排的.  你的情况应该数据库里面存的是字符串吧

ORM框架只复制翻译sql, 就是说他会翻译为order by [table_name.filed_name] 所以你排序还是依照filed_name的类型