2011-07-22 64 views
1

四天了,我一直在嘗試在我的數據庫中執行查詢。如何檢索使用標準,分離標準和子查詢的對象

繼承人的問題:

  1. 我有一個集團用戶
  2. 用戶可以有出生日期(可能爲null)
  3. 我想列出用戶 AND 用戶其中所有用戶都具有「空」的生日

我能夠很容易地獲取沒有用戶組(我做了左連接),我的問題是與第二部分,獲取所有用戶在出生日期爲空的組。

到目前爲止,這是我的代碼有:

Criteria c = session.createCriteria(Group.class); 
c.createAlias("userCollection", "u", Criteria.LEFT_JOIN); 
c.add(Restrictions.or(Restrictions.isNull("userCollection"), 
      Restrictions.isNull("u.birthDate"))); 

這工作得很好,但是當組中的用戶有一個生日不空羣仍出現在查詢中,因爲其他組中有null生日。我想我需要使用而不是,對不對?

如果有人可以幫忙,我嘗試了很多,但我得到一個空指針異常。

回答

2

執行此操作的最簡單方法是排除具有非空birthDate用戶的組,這兩個組同時處理這兩個條件(由於內連接,沒有用戶的組不會在此列表中)。

所以,像這樣:

DetachedCriteria excludedGroups = DetachedCriteria.forClass(Group.class); 
excludedGroups.createAlias("userCollection", "u"); 
excludedGroups.add(Restrictions.isNotNull("u.birthDate")); 
excludedGroups.setProjection(Projections.id()); 

Criteria c = session.createCriteria(Group.class); 
c.add(Subqueries.propertyNotIn("id", excludedGroups)); 

BTW,通過HQL這樣做會更容易。

+0

它拋出一個sql異常說:未知列'u.birthDate'。 – fredcrs

+0

它看起來好像沒有在子查詢中進行內連接 – fredcrs