【发布时间】:2011-01-28 02:43:07
【问题描述】:
我在使用 Hibernate 查询使用继承的类时遇到了问题。基本上我有以下类层次结构:
@Entity
@Table( name = "recording" )
class Recording
{
ClassA attributeSet;
...
}
@Entity
@Inheritance( strategy = InheritanceType.JOINED )
@Table( name = "classA" )
public class ClassA
{
String Id;
...
}
@Entity
@Table( name = "ClassB1" )
@PrimaryKeyJoinColumn( name = "Id" )
public class ClassB1 extends ClassA
{
private Double P1300;
private Double P2000;
}
@Entity
@Table( name = "ClassB2" )
@PrimaryKeyJoinColumn( name = "Id" )
public class ClassB2 extends ClassA
{
private Double P1300;
private Double P3000;
}
层次结构已经这样给出了,我不能轻易改变它。如您所见,ClassB1 和 ClassB2 继承自 ClassA。这两个类都包含一组有时甚至具有相同名称的属性(但我无法将它们移至 ClassA,因为可能有更多不使用它们的子类)。 Recording 类引用此类之一的一个实例。
现在我的问题是: 我想要做的是选择我的数据库中的所有 Recording 对象,这些对象引用 ClassB1 或 ClassB2 的实例,例如字段 P1300 == 15.5(因此这可能是 ClassB1 或 ClassB2 实例,因为在两个类中都声明了 P1300 属性)。
我尝试的是这样的:
Criteria criteria = session.createCriteria(Recording.class);
criteria.add( Restrictions.eq( "attributeSet.P1300", new Double(15.5) ) );
criteria.list();
但是由于 P1300 不是 ClassA 的属性,所以 hibernate 抛出异常告诉我:
could not resolve property: P1300 of: ClassA
我如何告诉 hibernate 它应该在所有子类中搜索以找到我要过滤的属性?
谢谢迈克尔D
【问题讨论】: