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)
假设我有两个继承自 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)