HQL - 只与一个子类连接

时间:2012-10-21 21:35:01

标签: hibernate inheritance hql

我的模型(InheritanceType.JOINED):

class Parent{...} 
class Child1 extends Parent{...}   
class Child2 extends Parent{...}
class Child3 extends Parent{...}
class Child4 extends Parent{...}
class Agg{
  List<Parent> l;
}

Agg通过连接表与父连接。父没有Agg对象。

我正在对Child2进行一些过滤,即: “从Child2 ch2 WHERE ch2.field1 = ... ch2.field2 = ...等。”

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

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

HQL“来自Agg a Join a.l”也加入了所有子类(即使使用ch2.class)

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用交叉联接来解决此问题,因为DBMS无论如何都会将其优化为内部联接。像这样SELECT ch2, agg FROM Child2 ch2, Agg agg WHERE ch2.joinField = agg.id AND ch2.field1 =... AND ch2.field2 =...