JPA TABLE_PER_CLASS继承:如何只能选择超类条目?
-
27-09-2019 - |
题
我使用的EclipseLink作为JPA提供。另外我使用以下TABLE_PER_CLASS继承结构
@javax.persistence.Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@NamedQueries({
@NamedQuery(name=Parent.QUERY_FIND_ALL, query="SELECT p FROM Parent p")
})
public class Parent {
// the class code follows here
}
@javax.persistence.Entity
@NamedQueries({
@NamedQuery(name=Child.QUERY_FIND_ALL, query="SELECT c FROM Child c")
})
public class Child extends Parent {
// the class code follows here
}
现在的问题是,我只想接收父类的条目。但与命名查询“的选择P从父页的”从子表也都条目返回。
在选择或找到代码如下:
public List findWithNamedQuery(String query) {
return em.createNamedQuery(query).getResultList();
}
由此查询即 “选择P档从父P”。
我如何只接收真正的父项,这inheritacne层次的不是所有项目?
在短:我怎样才能让所有子项不变,并只返回父项
?修改1:强>结果 我使用的EclipseLink 2.0.1,但每次我试图通过类型表达axtavt的解决方案的时候,我收到以下错误:
"Invalid Type Expression on [my.domain.Parent]. The class does not have a descriptor, or a descriptor that does not use inheritance or uses a ClassExctractor for inheritance".
我也更新到2.1.1的EclipseLink的最新稳定版本,但它并没有解决问题。
解决方案 2
与TABLE_PER_CLASS继承组合使用的类型表达没有按2.1.1的EclipseLink下”吨工作,这似乎是一个错误。
又见答案 JPA 2.0:TYPE表达异常一>
其他提示
如果您的EclipseLink版本支持JPA 2.0,你可以写
SELECT p FROM Parent p WHERE TYPE(p) = Parent
不隶属于 StackOverflow