2012-06-10 60 views
1

我有一個Dept表和Emp表。入世對一個NHibernate的標準多個字段查詢

我需要連接這兩個表以這樣的方式使where條款看起來是這樣的:

where dept.deptId = emp.DeptId and dept.deptName = emp.empTrainingName 

我嘗試這樣做:

Criteria criteria = session.createCriteria(Dept.class).createAlias("empMap","id"); 

利用這一點,第一where條件即執行dept.deptId = emp.DeptId。但我不知道如何與emp.empTrainingName比較dept.deptName

如何做到這一點使用NHibernate的條件查詢API?

回答

8
Criteria criteria = session.createCriteria(Dept.class, "department") 
          .createAlias("empMap", "employee") 
          .add(Restrictions.eqProperty("department.deptName", 
                 "employee.empTrainingName")); 

你也可以使用一個與條款,這將在左的情況下,有必要加入:

Criteria criteria = 
    session.createCriteria(Dept.class, "department") 
      .createAlias("empMap", 
         "employee", 
         Criteria.LEFT_JOIN, 
         Restrictions.eqProperty("department.deptName", 
               "employee.empTrainingName")); 

旁註:你的名字的選擇是可怕的。取而代之的Dept.deptId,爲什麼不使用Department.id?取而代之的Emp.empTrainingName,爲什麼不選擇Employee.trainingName

+0

感謝您的快速回復。是的,他們很糟糕,我正在考慮如何解釋我的問題,並沒有一個真正的表名,因此出現了一些毫無意義的東西。順便說一句,用這種方法,我正在執行表之間的內部連接。如果我想執行外連接,那麼如何使用休眠來完成呢?你可以請張貼一些示例外連接,我可以玩嗎? – user182944

+0

請參閱編輯我的答案。 –