52.Hibernate Hql与Criteria查询的补充知识
*HQL
1.查询多个对象select art, user from Article art, User user where art.author.id = user.id and art.id =: id这种方式返回的是Object[], Object[0]:article, Object[1]:user.
2.分页query.setFirstResult, query.setMaxResults.
查询记录总数query.iterate("select count(*) from Person").next()
3.批量更新query.executeUpdate()可能造成二级缓存有实效数据。
1.查询多个对象select art, user from Article art, User user where art.author.id = user.id and art.id =: id这种方式返回的是Object[], Object[0]:article, Object[1]:user.
2.分页query.setFirstResult, query.setMaxResults.
查询记录总数query.iterate("select count(*) from Person").next()
3.批量更新query.executeUpdate()可能造成二级缓存有实效数据。
*Criteria
1.排序Criteria.addOrder(Order.desc(propertyName));
2.关联查询criteria.setFetchMode("propertyName",FetchMode.SELECT)与映射文件中关联关系的fetch作用一致。
3.投影Projections.rowCount(), max(propertyName), avg, groupProperty...
4.分页Projections.rowCount(), criteria.setFirstResult(), criteria.setMaxResults()
5.DetachedCriteria可在session外创建(在其他层创建比如在Service中创建)然后用getExecutableCriteria(session)方法创建Criteria对象来完成查询。
6.Example查询,Example.create(obj);criteria.add(example).