2011-12-27 69 views
5

我有兩個具有雙向@OneToOne映射的類。選擇Hibernate OneToOne關聯不存在的實體

Class A { 
@OneToOne(fetch = FetchType.Lazy, mappedBy="a") 
private B b; 
} 

Class B { 
@OneToOne(fetch = FetchType.Eager) 
private A a; 
} 

我需要編寫代碼來檢索B的所有實例,這些實例沒有與它們關聯的A的實例。我也需要寫一個類似查詢所有這些都沒有B.

我已經嘗試了:

Criteria criteria = getSession().createCriteria(B.class) 
criteria.add(Restrictions.isNull("a") 

但這似乎總是返回null。思考?

回答

9

這應該工作,爲兩個方向:

Criteria criteria = session.createCriteria(B.class, "b"); 
criteria.createAlias("b.a", "a", Criteria.LEFT_JOIN); 
criteria.add(Restrictions.isNull("a.id")); 
+0

作品。無法弄清楚爲什麼isNull在我的查詢中使用OneToOne將null添加到了錯誤的屬性中。 – MattC 2014-02-06 15:44:53

+1

由於'Criteria.LEFT_JOIN'被刪除,現在可以使用'criteria.createAlias(「b.a」,「a」,JoinType.LEFT_OUTER_JOIN);' – 2016-08-19 12:32:04