讓我們假設我有3個抽象超類:SuperA
,SuperB
和SuperC
。 讓我們假設每個超類都有很多更具體的實現,並且所有的超類都注有@Inheritance(strategy = InheritanceType.JOINED)
。JPQL和繼承
更具體的:
Aa
< -SuperA
並具有SuperB
(的bbs
屬性)的列表;Bb
< -SuperB
並且具有列表SuperC
(ccs
屬性);Cc
< -SuperC
並具有foo
屬性。
然後,當我嘗試類似下面的查詢,我得到了一個錯誤,指出它無法在類型SuperC
找物業foo
。 Bb
有一個抽象類型的列表,我不能改變它。所以,我不知道如何使查詢有效。
select a from Aa a left outer join a.bbs b where b.ccs.foo = :foo
任何提示都會有所幫助。提前致謝。
編輯:
BTW:異常:
org.hibernate.exception.SQLGrammarException: Unknown column 'cc3_1_.foo' in 'where clause'
編輯2:
我找JPA文檔,發現something可以工作,如果我不使用Hibernate。
編輯3:
我改變它使用兩個SQL的。首先,我找到了基於foo
屬性的C的id,然後我只是用查詢比較id。
這裏的問題是,我必須每次都要做2個SQL ......但是,至少它是有效的。
它的氣味就像你的ORM框架的一個bug,只是因爲你想訪問'Cc'表中的屬性/字段而不是'SuperC'。 Programaticaly你應該使和明確投到SuperC.foo .... –
一個問題,這是一個生成的查詢或手動建立? –
基於這篇文章[鏈接] http://www.java。net/node/668740 [/ link],你可以在你的映射中使用後代類代替你的超級類...'class Aa {private List ccs; ....' –