【发布时间】:2018-11-14 23:35:32
【问题描述】:
我在该实体中有一个 Person 实体我有一组用于 PersonNames 的嵌套实体。 Person 和 PersonNames 之间存在 OneToMany 关系,因为一个人可以有多个名称。
@XmlElementWrapper(name = "names")
@XmlElement(name = "name")
@OneToMany(mappedBy = "person", orphanRemoval = false, fetch = FetchType.EAGER)
private Set<PersonNames> name;
您可以看到上面的 PersonNames 集是如何定义的。
我需要创建一个 JPA Criteria 查询来查找在 firstName、middleName 或 lastName 上具有 PersonNames 对象的所有 Person 实体。
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();
}
以上是我完成上述查询的尝试,但是我在 Predicate 行的“.get(Person_.personId)”部分收到以下错误:
类型Path中的get(SingularAttribute)方法不适用于参数(SingularAttribute)
谓词行可能完全错误,但我不知道如何实现这一点,而且我的谷歌似乎没有任何结果。我需要为此进行显式联接吗?
编辑:删除了 Hibernate 标签,因为我意识到这是我们的 Wildfly 服务器想要使用的,但我们没有在代码中使用 Hibernate。
【问题讨论】:
标签: java jpa jaxb criteria-api