我有一个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);
但这不起作用。请帮我一样。在此先感谢您的帮助。
答案 0 :(得分:0)
您的查询无效,因为配置中的userdepartment中不存在用户部门与用户部门关系。您必须在userdepartment中创建userdepartment的子级。然后你可以访问那些孩子。这是因为nhibernate使用在配置中定义的关系来遍历。