Spring Data JPA-JPQL 实现中文字段拼音排序
直接使用order by 对中文字段排序,结果并不是期待的样子。
想实现中文排序,需要用到hibernate.dialect。思路为:手动定义一个sql function,供JPQL使用,实现中文排序,这个function是基于特定的数据库的。
package com.demo.opt.sys.OracleChineseDialect;
import org.hibernate.dialect.Oracle10gDialect;
import org.hibernate.dialect.function.SQLFunctionTemplate;
import org.hibernate.type.StandardBasicTypes;
/**
1. 数据库为ORACLE
*/
public class OracleChineseDialect extends Oracle10gDialect {
/**
* 使JPQL支持中文排序
*/
public OracleChineseDialect(){
super();
registerFunction("convert_gbk", new SQLFunctionTemplate(StandardBasicTypes.STRING, "nlssort(?1,'NLS_SORT=SCHINESE_PINYIN_M')"));
}
}
以上是基于oracle数据库的代码,如果是其他数据库,1. 修改继承的类Oracle10gDialect,2. 找到该数据库中文排序的方法。