У меня есть сущность Person внутри этой сущности. У меня есть вложенный набор сущностей для PersonNames. Существует связь OneToMany между Person и PersonNames, заключающаяся в том, что у человека может быть несколько имен.
@XmlElementWrapper(name = "names")
@XmlElement(name = "name")
@OneToMany(mappedBy = "person", orphanRemoval = false, fetch = FetchType.EAGER)
private Set<PersonNames> name;
Вы можете увидеть, как набор PersonNames определен выше.
Мне нужно создать запрос JPA Criteria для поиска всех сущностей Person, у которых есть объект PersonNames, совпадающий с firstName, middleName или lastName.
public List<Person> getPerson(String lastName, String middleName, String firstName) {
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Person> criteria = builder.createQuery(Person.class);
Root<Person> root = criteria.from(Person.class);
criteria.select(root);
if(!lastName.isEmpty() && lastName != null) {
Predicate lastNameCondition = builder.equal( root.get(Person_.personId).get(PersonNames_.lastName), lastName);
criteria.where(lastNameCondition);
}
TypedQuery<Person> query = em.createQuery(criteria);
return query.getResultList();
}
Выше приведена моя попытка выполнить указанный запрос, однако я получаю следующую ошибку в части ".get(Person_.personId)" строки Predicate:
Метод get(SingularAttribute) в типе Path неприменим для аргументов (SingularAttribute)
Строка предиката может быть совершенно неправильной, но я не могу понять, как это сделать, и ничего из того, что я гуглю, похоже, не дает никаких результатов. Нужно ли для этого делать явное соединение?
Изменить: удален тег Hibernate, так как я понял, что это то, что хочет использовать наш сервер Wildfly, но мы не используем Hibernate в нашем коде.