您如何通过Hibernate多态标准属性进行查询

时间:2011-11-10 02:02:34

标签: hibernate polymorphism

假设

@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”。

1 个答案:

答案 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')