Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA CriteriaQuery-不区分重音_Java_Postgresql_Jpa_Non Ascii Characters_Accent Insensitive - Fatal编程技术网

Java JPA CriteriaQuery-不区分重音

Java JPA CriteriaQuery-不区分重音,java,postgresql,jpa,non-ascii-characters,accent-insensitive,Java,Postgresql,Jpa,Non Ascii Characters,Accent Insensitive,我正在使用JPA和PostgreSQL,我想创建一个CriteriaQuery并创建一个查询 没有考虑口音的地方 例如: 如果我搜索字母“a”,数据库应该返回值“ã”、“a”、“á”等。这应该发生在所有字母上 这是我想更改的代码示例。在本例中,它只区分大小写,不区分重音 CriteriaBuilder qb = em.getCriteriaBuilder(); CriteriaQuery query = qb.createQuery(Pessoa.class); Roo

我正在使用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);
CriteriaBuilder qb=em.getCriteriaBuilder();
CriteriaQuery=qb.createQuery(Pessoa.class);
Root=query.from(Pessoa.class);
query.from(Pessoa.class);
From=根;
谓词谓词=qb.like(qb.lower(from.get(“name”)),
“%”+名称+“%”;
where(谓词);

我使用了criteriaBuilder的功能,可以得到我想要的。我刚刚在类qb函数中调用了qb函数

我是这样做的:

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

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

谓词p=cb.like(
cb.function(“convert”、String.class、cb.lower(root.get(Api_u.name))、cb.literal(“SF7ASCII”),
“%”+StringUtils.stripAccents(name.toLowerCase())+“%”;

我希望能够这样做:使用CriteriaQueryso使用CriteriaBuilder.function调用“uncent”(不管SQL函数是什么),从uncent(名称)类似uncent(“%JOÃO%”)的person-WHERE中选择*。使您的代码依赖于数据库,但对于这样的事情,您可能总是会依赖数据库