JPA CriteriaQuery - 重音不敏感
JPA CriteriaQuery - accent insensitive
我正在使用 JPA 和 PostgreSQL,我想创建一个 CriteriaQuery 并创建一个查询
不考虑重音的地方。
示例:
如果我搜索字母 'a',数据库应该 return 值 'ã'、'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);
我使用了criteriaBuilder的功能,得到了我想要的。我刚刚在 qb.like 函数中调用了 qb.function。
我是这样做的:
Predicate predicate = qb.like(qb.function("unaccent",
String.class,qb.lower(from.get("name"))),
"%" + removeAccents(name) + "%");
使用带有 SF7ASCII
(葡萄牙语)作为参数的 Oracle 转换函数:
Predicate p = cb.like(
cb.function("convert", String.class, cb.lower(root.get(Api_.name)), cb.literal("SF7ASCII")),
"%" + StringUtils.stripAccents(name.toLowerCase()) + "%");
我正在使用 JPA 和 PostgreSQL,我想创建一个 CriteriaQuery 并创建一个查询 不考虑重音的地方。
示例: 如果我搜索字母 'a',数据库应该 return 值 'ã'、'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);
我使用了criteriaBuilder的功能,得到了我想要的。我刚刚在 qb.like 函数中调用了 qb.function。
我是这样做的:
Predicate predicate = qb.like(qb.function("unaccent",
String.class,qb.lower(from.get("name"))),
"%" + removeAccents(name) + "%");
使用带有 SF7ASCII
(葡萄牙语)作为参数的 Oracle 转换函数:
Predicate p = cb.like(
cb.function("convert", String.class, cb.lower(root.get(Api_.name)), cb.literal("SF7ASCII")),
"%" + StringUtils.stripAccents(name.toLowerCase()) + "%");