加入NHibernate Criteria查询中的多个字段

时间:2012-06-10 09:42:17

标签: hibernate nhibernate criteria hibernate-criteria

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

我需要加入这两个表,使where子句看起来像这样:

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

我试过了:

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

使用它,首先执行条件,即dept.deptId = emp.DeptId。但我不确定如何将dept.deptNameemp.empTrainingName进行比较。

如何使用NHibernate中的Criteria API执行此操作?

1 个答案:

答案 0 :(得分:9)

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