Hibernate JPA построитель критериев игнорировать запросы - PullRequest
38 голосов
/ 08 января 2011

Как сделать так, чтобы игнорировать регистр запросов, используя построитель критериев.Для описания свойства я хочу сделать что-то вроде 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();

Ответы [ 2 ]

72 голосов
/ 08 января 2011

Существует метод CriteriaBuilder.upper():

personCriteriaQuery.where(criteriaBuilder.like(
    criteriaBuilder.upper(personRoot.get(Person_.description)), 
    "%"+filter.getDescription().toUpperCase()+"%"));     
12 голосов
/ 19 сентября 2017

Если база данных содержит немецкие слова с такими буквами, как Fußballschuhe в столбце, java изменит параметр в верхнем регистре на FUSSBALLSCHUHE, и запрос не будет совпадать. В этом случае будет работать строчная буква:

personCriteriaQuery.where(criteriaBuilder.like(
    criteriaBuilder.lower(personRoot.get(Person_.description)), 
    "%"+filter.getDescription().toLowerCase()+"%"));   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...