Orm 如何在jpql查询中只查询超类实体?

Orm 如何在jpql查询中只查询超类实体?,orm,jpa,eclipselink,jpa-2.0,jpql,Orm,Jpa,Eclipselink,Jpa 2.0,Jpql,我拥有以下实体: @Entity @Inheritance(strategy=InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name="orderType", discriminatorType=DiscriminatorType.STRING) @DiscriminatorValue(value="BASE") @Table(name = "orders") public class OrderEntity implements Seri

我拥有以下实体:

@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="orderType", discriminatorType=DiscriminatorType.STRING)
@DiscriminatorValue(value="BASE")
@Table(name = "orders")
public class OrderEntity implements Serializable {
...

我可以找到具有以下jpql的所有子类(RecurringOrderEntity):

Query q = em.createQuery(
                "SELECT o from RecurringOrderEntity o where "
                + "o.cancellationDate is null "
                + "and o.maxOccurrences = o.occurrence");
JPQL语法是什么,用于只查找不是RecurringOrderEntity实例的实体

我使用Eclipselink 2.0.0作为JPA提供商

谢谢

JPQL语法是什么,用于只查找不是RecurringOrderEntity实例的实体

使用带有
type
运算符的实体类型表达式。类似这样的情况(不确定您想要的确切查询,但您已经知道了):

实体类型文字是 由实体名称指定

使用实体的Java类 作为输入参数来指定 实体类型

示例:

SELECT e
FROM Employee e
WHERE TYPE(e) IN (Exempt, Contractor)

SELECT e
FROM Employee e
WHERE TYPE(e) IN (:empType1, :empType2)

SELECT e
FROM Employee e
WHERE TYPE(e) IN :empTypes

SELECT TYPE(e)
FROM Employee e
WHERE TYPE(e) <> Exempt
选择e
来自雇员e
其中(e)类为(豁免,承包商)
选择e
来自雇员e
其中(:empType1,:empType2)中的类型(e)
选择e
来自雇员e
其中类型(e)位于:空类型
选择类型(e)
来自雇员e
其中(e)类豁免

在不知道任何子类的情况下,有没有办法做到这一点?
SELECT o 
FROM OrderEntity o 
WHERE TYPE(o) <> RecurringOrderEntity
  AND o.cancellationDate is null
  AND o.maxOccurrences = o.occurrence
entity_type_expression ::=
       type_discriminator |
       entity_type_literal |
       input_parameter
type_discriminator ::=
       TYPE(identification_variable |
            single_valued_object_path_expression |
            input_parameter )
SELECT e
FROM Employee e
WHERE TYPE(e) IN (Exempt, Contractor)

SELECT e
FROM Employee e
WHERE TYPE(e) IN (:empType1, :empType2)

SELECT e
FROM Employee e
WHERE TYPE(e) IN :empTypes

SELECT TYPE(e)
FROM Employee e
WHERE TYPE(e) <> Exempt