JPA标准:查询子类属性的问题
我使用的是Hibernate4.3.6.Final,它支持JPA2.1。我需要根据用户输入构建一个复杂的查询。 我已经完成了剩下的工作,但我仍然有这个问题。让我们把元模型或其他解决方案放在一边,看看如何解决当前的问题 以下是类结构及其关系:JPA标准:查询子类属性的问题,jpa,criteria-api,Jpa,Criteria Api,我使用的是Hibernate4.3.6.Final,它支持JPA2.1。我需要根据用户输入构建一个复杂的查询。 我已经完成了剩下的工作,但我仍然有这个问题。让我们把元模型或其他解决方案放在一边,看看如何解决当前的问题 以下是类结构及其关系: class BaseObject implements Serializable { } class A extends BaseObject{ @OneToMany(mappedBy = "aref", fetch = FetchType.LA
class BaseObject implements Serializable {
}
class A extends BaseObject{
@OneToMany(mappedBy = "aref", fetch = FetchType.LAZY,
cascade = {CascadeType.PERSIST, CascadeType.REMOVE, CascadeType.MERGE}, orphanRemoval = true)
private List<B> blist;
}
class B extends BaseObject {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "aref")
private A aref;
}
//-------------NOTE THAT IS A SUBCLASS OF B------------
class C extends B {
@OneToMany(mappedBy = "cref", fetch = FetchType.LAZY,
cascade = {CascadeType.PERSIST, CascadeType.REMOVE, CascadeType.MERGE}, orphanRemoval = true)
private List<D> dlist;
}
class D {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "cref")
private C cref;
String name;
}
现在我想得到一个列表a对象,在联接之后,类D中name字段的值是John。以下是我所拥有的:
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery cq = cb.createQuery();
Root<A> root = cq.from(A.class);
CriteriaQuery<Object> select = cq.select(root);
Join bjoin = root.join("blist");
Join cjoin = cb.treat(bjoin, C.class);
Join djoin = cjoin.join("dlist"); //ERROR HAPPENS HERE
Predicate p = cb.equal(djoin.get("name"), "John");
cq.where(p);
Query query = em.createQuery(select);
List<A> result = query.getResultList();
但我一直得到以下错误:
在此ManagedType[BaseObject]上找不到具有给定名称[dlist]的属性
我现在做的对吗?如何解决这个问题?我认为使用treat方法应该有助于找到子类的属性
谢谢