【问题标题】:Joining on multiple fields in a NHibernate Criteria query在 NHibernate Criteria 查询中加入多个字段
【发布时间】:2012-06-13 15:00:52
【问题描述】:

我有一个Dept 表和一个Emp 表。

我需要以这样的方式加入这两个表,where 子句看起来像这样:

where dept.deptId = emp.DeptId and dept.deptName = emp.empTrainingName

我试过了:

Criteria criteria = session.createCriteria(Dept.class).createAlias("empMap","id");

使用它,执行第一个 where 条件,即dept.deptId = emp.DeptId。但我不确定如何比较 dept.deptNameemp.empTrainingName

我如何使用 NHibernate 中的 Criteria API 做到这一点?

【问题讨论】:

    标签: hibernate nhibernate criteria hibernate-criteria


    【解决方案1】:
    Criteria criteria = session.createCriteria(Dept.class, "department")
                               .createAlias("empMap", "employee")
                               .add(Restrictions.eqProperty("department.deptName", 
                                                            "employee.empTrainingName"));
    

    您也可以使用 with 子句,这在左连接的情况下是必需的:

    Criteria criteria = 
        session.createCriteria(Dept.class, "department")
               .createAlias("empMap", 
                            "employee", 
                            Criteria.LEFT_JOIN,
                            Restrictions.eqProperty("department.deptName", 
                                                    "employee.empTrainingName"));
    

    旁注:你选择的名字很糟糕。而不是Dept.deptId,为什么不使用Department.id?为什么不选择Emp.empTrainingName,而不是Employee.trainingName

    【讨论】:

    • 感谢您的快速回复。是的,它们很糟糕,我在想如何解释我的问题并且没有真正的表名,因此得出了一些毫无意义的东西。顺便说一句,通过这种方式,我正在表之间执行内部连接。如果我想执行外部联接,那么如何使用休眠来执行呢?您能否发布一些我可以玩的外部连接示例?
    猜你喜欢
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    • 2014-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-11
    • 1970-01-01
    相关资源
    最近更新 更多