【发布时间】:2012-01-24 08:35:13
【问题描述】:
我有 3 个实体继承自另一个实体。 我正在使用策略 Single_Table
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
例如B、C 和 D 类继承自 A
在实体 B 上,我急切地加载另一个实体 X。不幸的是,Hibernate 忽略了我的注释并为每个实体 B 创建一个选择以获取实体 X。
@ManyToOne(fetch=FetchType.EAGER)
private Projekt projekt;
我的选择语句如下所示: '从 A 中选择一个'
更多代码示例:
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "DType", discriminatorType = DiscriminatorType.STRING, length = 3)
public abstract class A {}
@Entity
@DiscriminatorValue(B.PREFIX)
public class B extends A {
@ManyToOne(fetch=FetchType.EAGER)
private Projekt projekt;
}
现在我希望 Hibernate 查询从 A 继承的所有类,它确实如此。不幸的是,它还为每个结果行执行一个 select 语句来查询“projekt”,这是我想避免的。
【问题讨论】:
-
您的选择语句不是有效的 JPQL。你确定不是“从A中选择一个”吗?如果 Hibernate 为每个 B 生成一个选择来获取 X,那么它不会忽略您的注释:X 是急切地获取的。
-
谢谢,我更改了示例。我试图让它尽可能简单。
标签: hibernate jpa fetching-strategy