Условие нечувствительного к регистру API JPA 2 без использования метамодели
Как создать регистрозависимый критерий запроса без использования метамодели?
Я пытаюсь сделать что-то вроде этого:
CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<Resident> criteria = builder.createQuery(Resident.class);
Root<Resident> personRoot = criteria.from(Resident.class);
criteria.where(builder.and(
builder.equal(builder.upper(personRoot.get("firstName")), filter.getFirstName())), //ERROR
builder.equal(personRoot.get("lastName"), filter.getLastName()));
Но это выдает ошибку:
Метод верхнего уровня в интерфейсе javax.persistence.criteria.CriteriaBuilder не может быть применен к данным типам; [ОШИБКА] требуется: javax.persistence.criteria.Expression [ОШИБКА] найдено: javax.persistence.criteria.Path
2 ответа
Решение
Пытаться
Expression<String> firstName = personRoot.get("firstName");
criteria.where(builder.and(
builder.equal(builder.upper(firstName ), filter.getFirstName())),
builder.equal(personRoot.get("lastName"), filter.getLastName()));
Похоже, что метод верхнего имеет некоторые проблемы с принятием пути
Это должно скомпилировать:
...builder.upper(personRoot.<String>get("firstName"))...