У меня есть сущность Person внутри этой сущности. У меня есть вложенный Набор сущностей для PersonNames. Между Person и NameNames есть связь OneToMany, в которой у человека может быть несколько имен.
@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)" строки предиката:
Метод get (SingularAttribute) в типе Path не применим для аргументов (SingularAttribute)
Строка предиката может быть совершенно неправильной, но я не могу понять, как этого добиться, и ничто из того, что я гуглю, не дает никаких результатов. Нужно ли для этого сделать явное соединение?
Редактировать: Удален тег Hibernate, поскольку я понял, что это то, что хочет использовать наш сервер Wildfly, но мы не используем Hibernate в нашем коде.