假设
@Entity
Class Animals { }
@Entity
@Inheritance( stragegy = InheritanceType.JOINED)
class Dogs extends Animals {
private String furType;
}
@Entity
@Inheritance( stragegy = InheritanceType.JOINED)
class Cat extends Animals {
private String furType;
}
所有实体都是我数据库中的真实类,我没有选择重新设计数据库。
我如何使用DetactedCriteria创建一个析取查询,该查询说给我所有“动物”,其中furType ='loud'表示狗或者furType ='soft'表示猫? 对不起,我没有设计类层次结构,所以我不负责这个属性名称是相同的事实,我不能重新设计它,因为有其他子类的表不包含“furType”。
答案 0 :(得分:1)
在JPA 2.0中,您可以使用TYPE()
构造来完成此任务。这样的事情(未经检查)应该有效:
SELECT a
FROM Animals a
WHERE (TYPE(a) = Dogs AND a.furType = 'loud') OR
(TYPE(a) = Cat AND a.furType = 'soft')