gpt4 book ai didi

java - Hibernate:通过继承类的属性查询对象

转载 作者:搜寻专家 更新时间:2023-11-01 03:56:14 25 4
gpt4 key购买 nike

我在使用 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 它应该在所有子类中搜索以找到我要过滤的属性?

谢谢 MichaelD

最佳答案

由于属性private Double P1300出现在两个子类中,只需将其拉到父类即可。

如果有其他祖先没有这个属性,那么这样的查询就没有多大意义 - attributeSet 可能有也可能没有这个属性。

关于java - Hibernate:通过继承类的属性查询对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2454545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com