class 在 ReportQuery 中键入的 eclipselink 条件

eclipselink condition on class type in ReportQuery

假设我有两个继承自 class MySuperClass:

的实体 ChildClassA 和 ChildClassB
@Entity
@Table(name = "MY_TAB")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "MY_DISC")
public class MySuperClass 
{
    @Column
    private String X;   
    @Column
    private String Y;
    ...
}

@Entity
@DiscriminatorValue(value = "A")
public class ChildClassA extends MySuperClass 
{
    ...
}

@Entity
@DiscriminatorValue(value = "B")
public class ChildClassB extends MySuperClass 
{
    ...
}

我还有另一个 class OtherClass,其中 属性 myclass 类型为 MySuperClass:

@Entity
public class OtherClass
{   
    ...

    @ManyToOne
    private MySuperClass myclass;
    ...
}

我想对实体 OtherClass 进行查询,在 where 子句中我需要像 instanceof 这样的条件来应用于 属性 myclass。 像这样:

ExpressionBuilder ebQuery = new ExpressionBuilder();
ReportQuery rQuery = new ReportQuery(OtherClass.class, ebQuery);

Expression exp =     ebQuery.get("X").equal("my value x")
        .and(ebQuery.get("Y").equal("my value y"))
        .and(ebQuery.get("myClass").instanceOf(ChildClassA.class));

rQuery.setSelectionCriteria(exp);

ExecuteQuery(ebQuery);

有没有办法做到 ebQuery.get("mySuperClass").instanceOf(ChildClassA.class) ?

您需要使用type():

ebQuery.get("myClass").type().equal(ChildClassA.class)