Ответ 1
Существует метод CriteriaBuilder.upper()
:
personCriteriaQuery.where(criteriaBuilder.like(
criteriaBuilder.upper(personRoot.get(Person_.description)),
"%"+filter.getDescription().toUpperCase()+"%"));
Как сделать запрос на игнорирование case с помощью построителя критериев. Для описания свойства я хочу сделать что-то вроде 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();
Существует метод CriteriaBuilder.upper()
:
personCriteriaQuery.where(criteriaBuilder.like(
criteriaBuilder.upper(personRoot.get(Person_.description)),
"%"+filter.getDescription().toUpperCase()+"%"));
Если база данных содержит немецкие слова с буквами, такими как Fußballschuhe в столбце, java изменит параметр в верхнем регистре на FUSSBALLSCHUHE и запрос не будет соответствовать. В этом случае работает нижний регистр:
personCriteriaQuery.where(criteriaBuilder.like(
criteriaBuilder.lower(personRoot.get(Person_.description)),
"%"+filter.getDescription().toLowerCase()+"%"));