2012-10-21 91 views
4

我的模型(InheritanceType.JOINED)加入:HQL - 只有一個子類

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進行一些篩選,例如: 「From Child2 ch2 WHERE ch2.field1 = ... ch2.field2 = ... etc.」

我怎樣才能加入Child2與Agg,而不會導致與所有子類表連接。我想要使​​用'class'屬性(即ch2.class = ...)結果是正確的,但生成了,但我想要加入只與Child2表(不加入Child2,Child3,Child4)

查詢中包含聯接到每個子類;/

HQL「來自此Agg一個加入人」也與所有的子類(甚至ch2.class)

感謝加入!

+0

也許你有一個「熱切」加載在列表 Agg類,造成這種情況。當你使用Parent類進行JOIN時,你將會有這種行爲(因爲這一點,我從來沒有使用Hibernate的繼承)。你能提供更多的細節,比如所有類的映射嗎? – Dherik

回答

0

您可以使用交叉連接來解決這個問題,因爲DBMS會優化這個內部連接。像這樣SELECT ch2, agg FROM Child2 ch2, Agg agg WHERE ch2.joinField = agg.id AND ch2.field1 =... AND ch2.field2 =...