2012-09-27 75 views
4

我想在hibernate「標準」(不是在hql中)做一個查詢,但我沒有得到該做什麼或使用什麼。從一個簡單的SQL查詢(嵌套子查詢)的Hibernate標準查詢

select * from foo where column1 = 8 and column2 not in (
    select column2 from foo where column1 = 11 
) 

我做了兩個不同的查詢,然後使用Java函數得到結果,但我需要一個單一的標準查詢它。

+1

jubinPatel,因爲這似乎是你真正想問的問題,從[你的其他問題](http://stackoverflow.com/q/12618887/331508),你應該關閉並刪除該問題,因爲** this是另外一個重複。** –

+0

感謝您的建議,我嘗試過,但我不能這樣做。 –

+0

是的,你還沒有足夠的代表。你可以做幾件事情:(1)編輯問題只是說它是重複的,請關閉它,(2)在[meta](http://meta.stackoverflow.com/)上打開一個問題,詢問該問題被刪除。或者,如果您獲得15位代表,則可以將該問題標記爲管理員。 –

回答

7

模知道您的實際實體映射是什麼(這當然是徹底未經測試的),很可能通過類似的東西

Session hibernateSession = ... (however you get it). 

DetachedCriteria d = DetachedCriteria.forClass(Foo.class) 
     .add(Restrictions.eq("column1", 11)) 
     .setProjection(Projections.property("column2")); 

Criteria criteria = hibernateSession.createCriteria(Foo.class) 
     .add(Restrictions.eq("column1", 8)) 
     .add(Subqueries.propertyNotIn("column2", d)); 

List<Foo> result = criteria.list(); 

解決這將Almos酒店當然需要調整,因爲「column1」和「column2」是sql字段名稱,並且您在這些位置需要的是java屬性。

+0

這幾乎是我想要的。謝謝 –

0

創建標準選擇所有Criteria cr = session.createCriteria(Your.class); List list = cr.list(); 然後,你可以限制你添加到它,即其中列1 = 8等這樣的:cr.add(Restrictions.eq("YourCondition", YourCondition));

最後,可以提供沒有條款是這樣的:crit.add(Restrictions.not(Restrictions.in("YourNotInCondition", YourNotInCondition)));

+0

我是這樣做的,但對於第二種情況,我沒有得到適當的解決方案 –

+0

您是否嘗試在NOT IN中嵌套您的限制? –

+0

如果你有任何適當的地方,我可以找到它或看到至少有一個例子 –