通常有三种方法:
1.不写Hql,直接用对象导航的方式 。比如Set set=student.getCourses();//保证立即加载
2.将多对多关系转化为多对一和一对多关系,这个时候写hql比较清晰容易。
3.直接使用jdbc不过在正常的使用当中,使用第一种是最常见的。如果只是需要student中的一部分course,可以使用集合过滤即可完成功能。
1.不写Hql,直接用对象导航的方式 。比如Set set=student.getCourses();//保证立即加载
2.将多对多关系转化为多对一和一对多关系,这个时候写hql比较清晰容易。
3.直接使用jdbc不过在正常的使用当中,使用第一种是最常见的。如果只是需要student中的一部分course,可以使用集合过滤即可完成功能。
比如 select in (select ...)
还是连接查询效率高?因为in 实际上是或条件,效率很低,比and差不少
连接查询没怎么深入研究所以也不知道该怎么连
比如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());
上述语句就可以用来分页。
另外,使用集合过滤也可以实现多对多关系分页的功能,详细的内容请查看以下网址:
http://www.redsaga.com/hibernate-ref/3.1.2/zh-cn/html/queryhql.html#queryhql-bulk