如何使用Criteria为以下SQL查询生成Nhibernate查询

时间:2013-07-11 13:30:05

标签: nhibernate fluent-nhibernate nhibernate-criteria

我有一个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的Departments的用户。上面的查询可以实现我的目的。

现在我想将上面的查询转换为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);

但这不起作用。请帮我一样。在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您的查询无效,因为配置中的userdepartment中不存在用户部门与用户部门关系。您必须在userdepartment中创建userdepartment的子级。然后你可以访问那些孩子。这是因为nhibernate使用在配置中定义的关系来遍历。