Criteria连接查询,不能用别名

a249786607 2016-07-09 05:58:48
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,就不报错,能输出结果
为何????

...全文
164 1 打赏 收藏 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
阳光越来越暖 2016-07-10
  • 打赏
  • 举报
回复
dc.createAlias(Dept.class, "d"); dc.createAlias("d.emps", "e"); 用这个取别名试试

51,407

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧