Hibernate 实现Oracle的中文汉字按照拼音排序

在SSH+ExtJS的OA系统中,为满足客户要求,需解决列表中文按拼音排序的问题。最初误以为是Extjs Grid的问题,但排查后发现是Hibernate查询Oracle时的排序设置。通过Google,了解到需要修改Oracle的NLS_SORT参数为SCHINESE_PINYIN_M,但此方法不够灵活。最后决定重写Hibernate的Order接口,成功实现了根据拼音排序的功能,解决了问题。
摘要由CSDN通过智能技术生成

原始需求说明:

做的OA系统使用ssh+extjs,在给客户试用的时候,顾客觉得列表中中文汉字数据不是正常的按照拼音来排序的,客户就开始抱怨了,答应给客户修改,走起。


一开始以为是Extjs本身的Gird支持的问题,google一查,发现Grid也只支持ascii码排序,后来一想我的排序都是每次请求数据库的,排除了这个可能,那么问题就出现在在hibernate查询Oracle了,查看了我的通用查询排序接口,确实,使用的是criteria.addOrder(Order.desc(this.sortName));,Order.decs 到Oracle数据库中排序时,默认Oracle也是只支持ascii,这下完蛋了,于是乎google是否可以对Oracle参数进行设置,终于Google到了需要修改NLS_SORT系统参数,设置为SCHINESE_PINYIN_M,修改后觉得不太妥,如果客户又有新的方式,那就完蛋了啊。


想了20分钟,想了一个比较粗的方法,重写Order接口,代码如下

package com.sencloud.dh.core.command;

import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.criterion.CriteriaQuery;
import org.hibernate.criterion.Order;

/**
 * 实现Oracle数据库中文字段按照拼音排序问题 <一句话功能简述> <功能详细描述>
 * 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值