【发布时间】:2015-09-02 07:50:31
【问题描述】:
我们有一个继承层次结构,如下所示:
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@NamedQuery("select NEW package.BaseClass(bc.field1, bc.field2) from BaseClass b")
public abstract BaseClass {
public BaseClass(int field1, String field2) {
}
}
@Entity
public SubClass1 extends BaseClass {
}
和类似的 SubClass2
现在我面临的问题是这里的@NamedQuery 语法,它不允许我创建 List 对象,因为它无法使用构造函数实例化 BaseClass。那么任何人都可以建议如何解决这个问题,同时将命名查询留在基类本身中?
或者请告诉我是否有办法在选择中排除列
select bc.*Field3 from BaseClass
或者类似的语法会阻止延迟加载我在这种情况下不需要的关联字段3?
【问题讨论】:
-
由于集合是lazy加载的,执行查询不会加载它。只需从 BaseClass b 中使用 select b。
-
@JBNizet,首先,一个小的更正,我已经更新了问题,这不是我想要避免的集合,而是一个关联。但即使没有访问此关联对象,它也会在延迟加载关联的查询中触发。刚才确认了。不幸的是,我不确定是否可以在此处发布与代码相关的信息,否则我可以以触发查询的形式显示证明。我正在为父对象中的另一个关联对象使用 JOIN FETCH,但不需要的查询似乎是针对另一个关联对象,而不是我正在使用 JOIN FETCH 的那个。
标签: hibernate lazy-loading jpql