2011-09-23 23 views
0

這是我的層次:Hibernate的標準運行時類

// Table a 
class A {} 

// Table(" b 
class B extends A {} 

// Table my_class 
class MyClass { 

    A a; 
} 

我想有關係B但不A檢索數據庫中的所有MyClass對象。

Bjoined-subclass(通過id擴展表a)。

我的想法是什麼:

Criteria criteria = session.createCriteria(MyClass.class); 
criteria.add(Restrictions.eq("a.class", B.class); 

但它輸出一個錯誤:

could not resolve property: a.class of a.b.MyClass 

這是我可以把它的最簡單方法。請記住,查詢有點複雜。

問候。

Udo。

回答

2

我平時寫的DetachedCriteria將選擇所有B的和過濾MyClass的其中A在AllBs:

DetachedCriteria allBs = DetachedCriteria 
    .forClass(B.class) 
    .setProjection(Projections.property("id")); 

Criteria criteria = session.createCriteria(MyClass.class) 
    .add(Subqueries.In("a", allBs); 

(有可能是錯誤的,我不是一個Java程序員)

創建類似:

select ... 
from MyClass 
where A in (select id from A inner join B on ...) 
+0

+1我喜歡這個想法。我知道你不是java開發者,但它說我不能將String轉換爲Integer。任何想法?謝謝你的時間 – ssedano

+0

「A」應該是「a」。謝謝。 – ssedano