2013-07-11 48 views
0

我有如下SQL查詢NHibernate的查詢:怎樣才能利用標準以下SQL查詢

SELECT * 
FROM USER R 
     INNER JOIN userdepartment C 
       ON R.id = C.userid 
     INNER JOIN userdepartment K 
       ON C.userid = K.userid 
WHERE C.departmentid = 155 
     AND K.departmentid = 157 

用戶和部門有許多一對多的關係,維護關係,我有UserDepartment表。現在我只想獲取那些擁有Id 155和177兩個部門的用戶。上面的查詢就是我想要的。

現在我想將上述查詢轉換爲Nhibernate查詢。我正在使用Criteria來生成查詢。我試過以下幾種:

var criteria = Session.CreateCriteria<User>(); 
    var subcriteria = criteria 
         .CreateCriteria("UserDepartments","a", JoinType.InnerJoin); 
    subcriteria = subcriteria 
         .CreateCriteria("UserDepartments", "b", JoinType.InnerJoin); 
    var conjunction = Restrictions.Conjunction(); 
    conjunction.Add(Restrictions.Eq("DepartmentId", 155)); 
    conjunction.Add(Restrictions.Eq("DepartmentId", 177)); 
    subCriteria.Add(conjunction); 

但是這不起作用。請幫助我一樣。在此先感謝您的幫助。

+0

您應該在您的配置中定義關係,而不是嘗試在您的查詢中重新創建它 –

+0

@PanagiotisKanavos感謝您的回覆。我將嘗試定義關係 –

回答

0

您的查詢不起作用,因爲userdepartment中的userdepartment關係不存在於配置中的userdepartment中。您必須在userdepartment中創建userdepartment的子項。然後你可以訪問那些孩子。這是因爲nhibernate使用配置中定義的關係來遍歷。

+0

我將嘗試在UserDepartment中創建UserDepartment的子項。感謝您的回覆。 –

+0

我試過但徒勞無功。任何人都可以幫助我一樣嗎? –

+0

請發表您如何定義userdepartment實體的地圖 –