nhibernate - 如何编写涉及多个联接的条件查询

标签 nhibernate hql criteria

我正在尝试使用 Criteria API 编写以下 HQL 查询代码:

var userList = _session
                .CreateQuery("select u from User u where u.Role.ID=3 and u.Customer.ID=:cID")
                .SetInt32("cID", 1)
                .List<User>();

(3 个 NHibernate 对象:用户(ID、名称、角色、客户)、角色(ID、名称)和客户(ID、名称)。

我尝试了以下方法,但它不起作用,因为 NHibernate 尝试查找与角色关联的客户:

var userList = _session
            .CreateCriteria(typeof(User))
            .CreateCriteria("Role")
            .Add(Restrictions.Eq("ID", 3) )
            .CreateCriteria("Customer")
            .Add(Restrictions.Eq("ID", 1) )
            .List<User>();

还有其他方法(有效!)吗?

最佳答案

您可以使用别名

var userList = _session
        .CreateCriteria(typeof(User), "u")
        .CreateAlias("u.Role", "r")
        .Add(Restrictions.Eq("r.ID", 3) )
        .CreateAlias("u.Customer", "c")
        .Add(Restrictions.Eq("c.ID", 1) )
        .List<User>();

希望对你有帮助

关于nhibernate - 如何编写涉及多个联接的条件查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/372047/

相关文章:

c# - 使用无状态 session 延迟查找字典值

asp.net-mvc - 使用 NHibernate.AspNet.Identity

NHibernate 在单独的程序集中加入子类

mysql - 检索 fromdate 和 todate 之间的记录,在 MYSQL 或 HQL 中传递两个日期和外键值

doctrine-orm - 学说2标准 - 像运算符

c# - 级联还是不级联? ("object references an unsaved transient instance"错误)

java - 使用 hql 表达式而不是条件的动态 HQL 查询?

hadoop - 我们可以检查 Hive 表的大小吗?如果是这样,怎么做?

java - 引用条件查询中较早的别名字段

java - 关于 hibernate 标准的菜鸟问题