hibernate 子查询,使用离线Criteria对象实现
最近做项目,有多个表关联查询。
sql语句
hibernate代码
?
?****************************另外的举例*************************************
/** * 离线Criteria */@SuppressWarnings("unchecked")public static void two() {// 没有session也可以创建DetachedCriteriaDetachedCriteria c1 = DetachedCriteria.forClass(Employee.class);// 用离线的Criteria处理子查询DetachedCriteria c2 = DetachedCriteria.forClass(Employee.class);c2.setProjection(Property.forName("salary").avg()); // 添加属性的平均值投影DetachedCriteria c3 = DetachedCriteria.forClass(Employee.class);c3.setProjection(Projections.distinct(Property.forName("dept.deptId"))); // 统计部门不重复数据Session session = HibernateUtil.getUtil().getSession();Transaction tran = session.beginTransaction();System.out.println("++++++++++++++++++++++++++++++++++++++++");try {List<Employee> emplist = c1.getExecutableCriteria(session).list();for (Employee employee : emplist) {System.out.println(employee);}System.out.println("++++++++++++++++++++++++++++++++++++++++");Criteria criteria = session.createCriteria(Employee.class).add(Property.forName("salary").lt(c2));emplist = criteria.list();for (Employee employee : emplist) {System.out.println(employee);}System.out.println("++++++++++++++++++++++++++++++++++++++++");criteria = session.createCriteria(Dept.class).add(Property.forName("deptId").notIn(c3));List<Dept> deptlist = criteria.list();for (Dept dept : deptlist) {System.out.println(dept);}System.out.println("++++++++++++++++++++++++++++++++++++++++");tran.commit();} catch (Exception e) {tran.rollback();e.printStackTrace();}}?