Criteria连接查询,不能用别名
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,就不报错,能输出结果
为何????
...全文
相关推荐
Hibernate-Criteria 模糊查询
多表关联模糊查询在实际应用中,往往需要跨表进行模糊查询,例如在查找用户的同时还需要获取与其相关的订单信息。这种情况可以使用`createAlias()`方法创建别名,然后在别名基础上进行查询。
day36-hibernate检索和优化 02-Hibernate检索方式:简单查询及别名查询
本教程主要关注的是Criteria API和别名查询,它们提供了更加灵活和面向对象的检索方式。
Criteria用法
在Java的Hibernate框架中,Criteria API提供了一种用于动态构建查询的方法,它是Query By Criteria(QBC)查询方式的一部分。
Criteria(hibernate3.0).rar_Criteria java_criteria Hibernate_hibe
也支持连接查询,通过`createCriteria(String associationPath)`方法创建关联的Criteria。
Hibernat 使用Criteria查询多对多关系(SET集合)条件
("type", new Integer(1))) .createAlias("subs", "s") // 创建别名用于后续查询 .add(Restrictions.eq("s.value", new


