hibernate jpa criteriabuilder忽略大小写查询

use*_*201 43 jpa

如何使用条件构建器来忽略大小写查询.对于描述属性,我想做类似的事情upper(description) like '%xyz%'

我有以下查询

CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();

    CriteriaQuery<Person> personCriteriaQuery = criteriaBuilder.createQuery(Person.class);
    Root<Person> personRoot = personCriteriaQuery.from(Person.class);

    personCriteriaQuery.select(personRoot);
    personCriteriaQuery.where(criteriaBuilder.like(personRoot.get(Person_.description), "%"+filter.getDescription().toUpperCase()+"%"));
    List<Person> pageResults = entityManager.createQuery(personCriteriaQuery).getResultList();
Run Code Online (Sandbox Code Playgroud)

axt*_*avt 80

有一种CriteriaBuilder.upper()方法:

personCriteriaQuery.where(criteriaBuilder.like(
    criteriaBuilder.upper(personRoot.get(Person_.description)), 
    "%"+filter.getDescription().toUpperCase()+"%"));     
Run Code Online (Sandbox Code Playgroud)


小智 15

如果数据库在列中包含带有字母如Fußballschuhe的德语单词,则java会将大写方法中的参数修改为FUSSBALLSCHUHE,并且查询将不匹配.在这种情况下,小写将起作用:

personCriteriaQuery.where(criteriaBuilder.like(
    criteriaBuilder.lower(personRoot.get(Person_.description)), 
    "%"+filter.getDescription().toLowerCase()+"%"));   
Run Code Online (Sandbox Code Playgroud)

  • 也许将语言环境传递给toUpperCase或toLowerCase方法? (2认同)