HQL对Collection的操作,多对多、多对一等的set可以用此分页

来源:百度文库 编辑:神马文学网 时间:2024/04/28 00:59:05
其实是比较简单的,不要觉得多对多关系是Set而无从下手,实际上Set属性和String、int属性的操作是一样的。
比如Student和Course是多对多的关系,假如要查出一个名为“tomclus”的所有选课,一般用两种方法:
1.student.getCourses()//此student是tomclus
2.使用HQL语句,如下的示例代码:
Query q=session.createQuery("from Student s join fetch s.courses where s.name=‘tomclus‘");
q.setFirstResult(0);
q.setMaxResults(2);//只查询两条记录
List list=q.list();
Student stu=(Student) list.get(0);
log.info(stu.getCourses().size());
上述语句就可以用来分页。
也可以用集合过滤实现:
Query q = s.createFilter( collection, "" ); // 一个简单的过滤器
q.setMaxResults(PAGE_SIZE);
q.setFirstResult(PAGE_SIZE * pageNumber);
List page = q.list();
不用通过初始化,你就可以知道一个集合(Collection)的大小:
( (Integer) session.iterate("select count(*) from ....").next() ).intValue();