【问题标题】:How can I generate Nhibernate query using Criteria for the following SQL query如何使用 Criteria 为以下 SQL 查询生成 Nhibernate 查询
【发布时间】:2013-07-11 13:30:05
【问题描述】:

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

但这不起作用。请帮助我。提前感谢您的帮助。

【问题讨论】:

  • 您应该在配置中定义关系,而不是尝试在查询中重新创建它
  • @PanagiotisKanavos 感谢您的回复。我会尝试定义关系

标签: nhibernate fluent-nhibernate nhibernate-criteria


【解决方案1】:

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

【讨论】:

  • 我将尝试在 UserDepartment 中创建一个 UserDepartment 的子项。感谢您的回复。
  • 请发布您如何定义用户部门实体的地图
猜你喜欢
  • 1970-01-01
  • 2010-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多