2012-09-28 47 views
3

我想執行的查詢像Hibernate的標準財產不在(子查詢)

Select id, name from information where name not in (select firstname from contact where id = 1) 

Information 
Id Name 
1 Test 

Contact 
id firstname 
1 name 
2 Test 

如果我使用neProperty()函數,它會返回記錄爲name != Test.

我怎樣才能實現使用休眠條件?

感謝

回答

3

創建選擇,所有標準:

Criteria cr = session.createCriteria(Your.class); 
List list = cr.list(); 

然後,你可以限制你添加到它,即其中列1 = 8等這樣的:

cr.add(Restrictions.eq("YourCondition", YourCondition)); 

最後,你可以這樣提供not in條款:

cr.add(Restrictions.not(Restrictions.in("YourNotInCondition", YourNotInCondition))); 
10

您可以使用DetachedCriteria構建子查詢。

Contact contact = session.Get<Contact>(1); 

ICriteria criteria = session 
    .createCriteria(Information.class) 
    .add(Property.ne("name", contact.getName())); 

Disclamer:

// This corresponds to (select firstname from contact where id = 1) 
DetachedCriteria subquery = DetachedCriteria.forClass(Contact.class) 
    .add(Restrictions.eq("id", 1)) 
    .setProjection(Projections.property("name")) 

// This corresponds to (select information where name not in (subquery)) 
ICriteria criteria = session 
    .createCriteria(Information.class) 
    .add(Subqueries.notIn("name", subquery)); 

而不是使用子查詢,你可以使用session.get,有機會命中緩存只需加載接觸我是一個)不是一個Java程序員和b)可能犯了錯誤,因此可能不會編譯。代碼更多地粗略地顯示了這個想法,無論如何希望有幫助。