java - HQL 查询忽略重音符号

标签 java hibernate hql diacritics

我有以下查询:

select u from User u where upper(u.name) like upper(?1)

如果忽略 u.name?1 中的重音符号,情况会怎样?

最佳答案

我已经找到了实现这个的方法。基本上有两个步骤:

  1. 规范化参数(在您的情况下为 1)和
  2. 标准化数据库中的数据

示例

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/

相关文章:

java - 将集合展平作为 HQL 查询的一部分?

Java:HashMap.get 返回 null

java - ActionListener 的问题

hibernate - ColdFusion 9 ORM 关系映射

java - Hibernate HQL 转换 java.lang.ClassCastException : java. lang.Integer 无法转换为 java.lang.Long

hibernate - @Query 注解使用 like %?1%

java - 试图重新查询一个已经关闭的游标 - 如何找到这个已经关闭的游标?

java - Generic Map<String, Object> 使用 Moxy 进行 JSON 编码和解码

java - 使用注释时加入子类的未知实体问题

java - 如何将数据库生成的列值定义为 JPA 和 Hibernate 中的只读字段?