当前位置: 首页 > 面试题库 >

每个子类的继承关系表:如何在不加载任何子类的情况下针对父类进行查询?(休眠)

微生烨然
2023-03-14
问题内容

假设 每个子类继承关系 如下所示(来自wikibooks.org-
参见此处)

注意父类 不是抽象的

@Entity
@Inheritance(strategy=InheritanceType.JOINED)
public class Project {

    @Id
    private long id;

    // Other properties

}

@Entity
@Table(name="LARGEPROJECT")
public class LargeProject extends Project {

    private BigDecimal budget;

}

@Entity
@Table(name="SMALLPROJECT")
public class SmallProject extends Project {

}

我有一种情况我只需要检索Parent类 。由于性能问题,我应该怎么做 才能运行HQL查询 以检索Parent类,而
获取Parent类而不加载任何子类?


问题答案:

解决方法如下所述:

将您的Parent类定义为 MappedSuperClass 。假设父类映射到PARENT_TABLE

@MappedSuperClass
public abstract class AbstractParent implements Serializable {

    @Id
    @GeneratedValue
    private long id;

    @Column(table="PARENT_TABLE")        
    private String someProperty;

    // getter's and setter's

}

对于每个子类,扩展AbstractParent类并定义其 SecondaryTable 。父类中定义的任何持久字段都将映射到
SecondaryTable 定义的表。最后,根据需要使用AttributeOverrides

@Entity
@SecondaryTable("PARENT_TABLE")
public class Child extends AbstractParent {

    private String childField;

    public String getChildProperty() {
        return childField;
    }

}

并定义另一个实体,以仅检索父类

@Entity
@Table(name="PARENT_TABLE")
@AttributeOverrides({
    @AttributeOverride(name="someProperty", column=@Column(name="someProperty"))
})
public class Parent extends AbstractParent {}

没有其他的。如上所示,我仅使用了JPA特定的批注



 类似资料:
  • 问题内容: 假设 每个子类继承关系 的 表 如下所示(来自wikibooks.org- 参见此处) 注意父类 不是抽象的 我有一种情况 , 我只需要检索Parent类 。由于性能问题,我应该怎么做 才能运行HQL查询 以检索Parent类,而 只获取Parent类而不加载任何子类? 问题答案: 解决方法如下所述: 将您的类定义为 MappedSuperClass 。假设父类映射到 对于每个子类,扩

  • 高尔夫球场示例:我们有类,,和。 这里有很多为人父母的事情。 必须由18条赛道组成,这在高尔夫球场是很正常的 但是我遇到了一个问题。当我尝试调用的构造函数时... ... 我必须同时通过和的实例,但是。。。 ... 这些函数的构造函数要求我传递一个的实例。我陷入了一个递归问题。 我可以通过不再让每个成为这些类的成员来“解决”这一问题,但这让人感觉很不舒服,就像糟糕的做法一样-没有理由不让它们成为f

  • 问题内容: 我想知道如何将某些函数返回的父对象转换为子类。 我不能更改A类。如果可以的话,我可以对A类实现functionIneed,但是由于代码的结构,这是不可能的。 问题答案: Python不支持“广播”。您将需要编写代码,以便它可以适当地进行初始化。

  • 问题内容: 在Django中,当您有一个父类和从其继承的多个子类时,通常可以通过parentclass.childclass1_set或parentclass.childclass2_set访问一个子类,但是如果我不知道我想要的特定子类的名称怎么办? 有没有一种方法可以在不知道子类名称的情况下沿parent-> child方向获取相关对象? 问题答案: (更新:对于Django 1.2及更高版本,

  • 我有一个母公司类别(工具),有三个子公司(股票、债券、Etf)。父类还与类(InstrumentPrice)有一个OneToMany关系。JPA联接策略用于父实体和子实体之间。当一个子项被持久化(例如Stock)时,工具中的一个条目也会自动持久化,并具有所有公共属性。这很好用。但是,如何为类InstrumentPrice创建条目?我是否必须在保存股票后从DB读取实体工具,并使用Instrument

  • 问题内容: 我想在Python中实现自定义列表类作为的子类。为了获得所有列表操作的完全类型兼容性,我需要从基类中重写的最少方法集是什么? 这个问题表明至少需要重写。从进一步的研究,也和是必需的。所以我有这段代码: 下列语句即使没有覆盖方法也可以按需工作: 这些语句仅与上述类定义中的覆盖方法一起使用: 我唯一不知道如何实现的是使扩展切片返回正确的类型: 我需要在类定义中添加些什么才能获得类型? 另外