0

我有一个如下的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);

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

4

1 回答 1

0

您的查询不起作用,因为配置中的 userdepartment 中不存在 userdepartment 与 userdepartment 的关系。您必须在 userdepartment 中创建 userdepartment 的子项。然后你可以访问那个孩子。这是因为 nhibernate 使用配置中定义的关系来遍历。

于 2013-07-11T15:06:03.387 回答