我的模型(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)
谢谢!
答案 0 :(得分:0)
您可以使用交叉联接来解决此问题,因为DBMS无论如何都会将其优化为内部联接。像这样SELECT ch2, agg FROM Child2 ch2, Agg agg WHERE ch2.joinField = agg.id AND ch2.field1 =... AND ch2.field2 =...