JPA CriteriaQuery - 重音不敏感

时间:2015-10-21 17:22:20

标签: java postgresql jpa non-ascii-characters accent-insensitive

我正在使用JPA和PostgreSQL,我想创建一个CriteriaQuery并创建一个查询 没有考虑口音的地方。

实施例: 如果我搜索字母'a',数据库应该返回值'ã','a','á'等。这应该发生在所有字母上。

这是我想要更改的代码示例。在这种情况下,它只是不区分大小写,不是重音。

    CriteriaBuilder qb = em.getCriteriaBuilder();
    CriteriaQuery query = qb.createQuery(Pessoa.class);

    Root<Pessoa> root = query.from(Pessoa.class);
    query.from(Pessoa.class);
    From from = root;

    Predicate predicate = qb.like(qb.lower(from.get("name")),
            "%" + name+ "%");
    query.where(predicate);

2 个答案:

答案 0 :(得分:1)

我使用了criteriaBuilder的功能,可以得到我想要的东西。我刚刚在qb.like函数中调用了qb.function。

我是这样做的:

Predicate predicate = qb.like(qb.function("unaccent",         
String.class,qb.lower(from.get("name"))),
"%" + removeAccents(name) + "%");

答案 1 :(得分:0)

使用带有SF7ASCII(葡萄牙语)作为参数的Oracle转换函数:

Predicate p = cb.like(
                    cb.function("convert", String.class, cb.lower(root.get(Api_.name)), cb.literal("SF7ASCII")),
                    "%" + StringUtils.stripAccents(name.toLowerCase()) + "%");