我有以下查询:
select u from User u where upper(u.name) like upper(?1)
如果忽略 u.name
和 ?1
中的重音符号,情况会怎样?
最佳答案
我已经找到了实现这个的方法。基本上有两个步骤:
- 规范化参数(在您的情况下为 1)和
- 标准化数据库中的数据
示例
public User getByName(String paramName) {
.....
}
原始 HQL 查询:
String queryString = "select u from User u where u.name : =paramName";
新查询:
paramName = normalizer(paramName );
String queryString = "select u from User u where " + replacer(u.name) +" : =paramName";
还有两种方法:
public static String normalizer(String s) {
return Normalizer.normalize(s, Normalizer.Form.NFD).replaceAll("[^\\p{ASCII}]", "");
}
public String replacer(String param) {
String t1 = "àâäçéèëêùûüôöïî";
String t2 = "aaaceeeeuuuooii";
String s = param;
for (int i = 0; i < t1.length(); i++) {
s = "replace(" + s + ",'" + t1.charAt(i) + "','" + t2.charAt(i) + "')";
}
return s;
}
关于java - HQL 查询忽略重音符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6863001/