Criteria连接查询,不能用别名

a249786607 a249786607 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
package dao;


import java.util.List;
import java.util.Set;

import org.hibernate.Criteria;
import org.hibernate.Transaction;

import org.hibernate.criterion.Restrictions;

import Util.HibernateUtil;
import pojo.Dept;
import pojo.Emp;


public class DeptDao{
/*
* 查找部门,通过员工人数
*/
public void findDeptByEmpCounts(){
Criteria criteria = HibernateUtil.getSession().createCriteria(Dept.class,"d")
.createCriteria("d.emps","e").add(Restrictions.sizeGe("e", 6));//创建连接
//criteria.add(Restrictions.sizeGe("d.emps", 6));//dept 中EMP数量大于6 的dept
List<Dept> depts = criteria.list();
for(Dept dept:depts){
System.out.println("============================================================");
System.out.println("部门名称======》"+dept.getDname());
Set<Emp> emps = dept.getEmps();
for(Emp emp:emps){
System.out.println("员工姓名=======》"+emp.getEname());
}
System.out.println("============================================================");
}

}
public static void main(String[] args) {
// TODO Auto-generated method stub
Transaction transaction = HibernateUtil.getSession().beginTransaction();
DeptDao d = new DeptDao();
d.findDeptByEmpCounts();
}
}



主查询容器 Dept.class的别名"d",可以用,添加查询条件后,后面连接的emps的别名e,就不能用,直接报错
Exception in thread "main" org.hibernate.MappingException: Unknown collection role: pojo.Emp.e
at org.hibernate.impl.SessionFactoryImpl.getCollectionPersister(SessionFactoryImpl.java:636)
at org.hibernate.criterion.SizeExpression.toSqlString(SizeExpression.java:60)
at org.hibernate.loader.criteria.CriteriaQueryTranslator.getWhereCondition(CriteriaQueryTranslator.java:357)
at org.hibernate.loader.criteria.CriteriaJoinWalker.<init>(CriteriaJoinWalker.java:113)
at org.hibernate.loader.criteria.CriteriaJoinWalker.<init>(CriteriaJoinWalker.java:82)
at org.hibernate.loader.criteria.CriteriaLoader.<init>(CriteriaLoader.java:91)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1578)
at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:306)
at org.hibernate.impl.CriteriaImpl$Subcriteria.list(CriteriaImpl.java:481)
at dao.DeptDao.findDeptByEmpCounts(DeptDao.java:27)
at dao.DeptDao.main(DeptDao.java:43)


如果将查询条件改成下面注释的//criteria.add(Restrictions.sizeGe("d.emps", 6));直接用d.emps,就不报错,能输出结果
为何????

...全文

相关推荐

评论 1
收藏 已收藏
分享
返回顶部
a249786607
Java 51,407 成员 86,128 内容