其中,一对多和多对多面临着2种问题,一种是结构的问题,另外一种是内容的问题,我们只能在这二者选其一,选择了结构,就可能会出现我们需要的字段比查找出来的字段少得多,当然,这种情况,只能借助懒加载。如果选择了另外一种情况,可能会出现表的结构不同问题,我们自己创建的javaBean要先通过转换,才能调用dao操作数据库。
当我们查找数据的时候,如果关联到很多张表,那么应该怎样查找,查找那张表效率更高呢?
查找中间表效率比较高,因为效率高的数据库,把表都设计成星形,而不是饼状。
图中信息与本文无关,只是讨论一下表的结构。
各个部分的核心表之间都有连接。
所以我们说要查找中间表,效率较高。
Session session=sessionFactory.openSession();
//在这里以student为主(以哪个类为主,就以哪个类先写到from的后面)
String hql="from Student s left outer join fetch s.classes c1 left outer join fetch s.courses c2";
List<Student> students=session.createQuery(hql).list();
session.close();
return students;
如果查的是以中心表Student的集合的话,里面既有classes属性,又有courses的属性,遍历起来比较方便。
<!--
遍历list<Student<classes,set<Courses>>>
-->
<s:iterator value="#students">
<s:property value="sname"/><br/>
<!--
因为list<Student>里面,有classes类,也有set<Course>集合,
classes可以看成是里面的一个属性,
set就要另外迭代了。
由于当前迭代对象在栈顶,所以我们遍历set的时候,不用加#号
-->
<s:property value="classes.cname"/>
<s:iterator value="courses">
<s:property value="cname"/>
</s:iterator>
</s:iterator>