Hibernate HQL-仅与一个子类联接

Hibernate HQL-仅与一个子类联接,hibernate,inheritance,hql,Hibernate,Inheritance,Hql,我的模型(InheritanceType.JOINED): 类父项{…} 类Child1扩展了父{…} 类Child2扩展了父{…} 类Child3扩展了父{…} 类Child4扩展了父{…} 类Agg{ 清单l; } Agg通过联接表与父级连接。父对象没有Agg对象 我正在对Child2进行一些过滤,即: “来自Child2 ch2,其中ch2.field1=…ch2.field2=…等。” 我现在如何使用Agg连接Child2,而不导致连接所有子类表。 我只想使用Child2表连接(不使用

我的模型(InheritanceType.JOINED):

类父项{…}
类Child1扩展了父{…}
类Child2扩展了父{…}
类Child3扩展了父{…}
类Child4扩展了父{…}
类Agg{
清单l;
}
Agg通过联接表与父级连接。父对象没有Agg对象

我正在对Child2进行一些过滤,即: “来自Child2 ch2,其中ch2.field1=…ch2.field2=…等。”

我现在如何使用Agg连接Child2,而不导致连接所有子类表。 我只想使用Child2表连接(不使用Child2、Child3、Child4连接)

我试图使用'class'属性(即ch2.class=…)结果是正确的,但生成的查询包含每个子类的联接;/

HQL“From Agg a Join a.l”还与所有子类(甚至与ch2.class)连接


谢谢

您可以使用交叉连接来解决此问题,因为DBMS无论如何都会将其优化为内部连接。类似这样的
从Child2中选择ch2,agg ch2,agg agg,其中ch2.joinField=agg.id和ch2.field1=。。。而ch2.field2=…

可能是您在Agg类的列表中有一个“急切”的加载,导致了这种情况。当您与父类进行连接时,您将有这种行为(因此,我从不在Hibernate中使用继承)。你能提供更多的细节吗,比如所有类的映射?
class Parent{...} 
class Child1 extends Parent{...}   
class Child2 extends Parent{...}
class Child3 extends Parent{...}
class Child4 extends Parent{...}
class Agg{
  List<Parent> l;
}