Inheritance JPA表每类继承:如何仅选择超类条目?

Inheritance JPA表每类继承:如何仅选择超类条目?,inheritance,jpa,table-per-class,Inheritance,Jpa,Table Per Class,我使用EclipseLink作为JPA提供商。此外,我使用下表中的每类继承结构 @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 { //

我使用EclipseLink作为JPA提供商。此外,我使用下表中的每类继承结构

@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中选择p”也会返回子表中的所有条目

选择或查找代码如下所示:

public List findWithNamedQuery(String query) {
        return em.createNamedQuery(query).getResultList();
}
因此,查询是“从父p中选择p”

我如何才能真正只接收父项而不是该层次结构的所有项

简言之:如何保持所有子条目不变,而只返回父条目

编辑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".

我还更新了EclipseLink的最新稳定版本2.1.1,但它没有解决问题。

如果您的EclipseLink版本支持JPA2.0,您可以编写

SELECT p FROM Parent p WHERE TYPE(p) = Parent

在EclipseLink 2.1.1下,类型表达式与表\每\类继承相结合不起作用,这似乎是一个bug


另请参见

的答案。您是否曾经发现这一点?我也在试着做同样的事情。对于我的查询,我只希望返回父行,但也要返回子行。这个问题有什么更新吗?我的意思是,你找到过这个@gerry的答案吗