Hibernate【关系映射-左内右连接】
一。一对多 之 内连接
使用内连接
List list=session.createQuery(" from domain.Classes c inner join c.students").list();
classes中3条数据 。student中6条数据
发出了4条sql语句
list结构是6个Object[]类型数据
迫切内连接:
List list=session.createQuery(" from domain.Classes c inner join fetch c.students").list();
发出了1条sql语句
list结构是Classes类型
左外连接
List list=session.createQuery(" from domain.Classes c left join c.students").list();
发出了4条sql语句
list结构是6个Object[]类型数据
迫切左外连接
List list=session.createQuery(" from domain.Classes c left join fetch c.students").list();
发出了1条sql语句
list结构是Classes类型
要查询两张表的字段怎么办
(1)创建一个domain类,要有个构造函数
(2) 使用
List list=session.createQuery("select new domain.ClassesView(c.name,s.name) from domain.Classes c inner join fetch c.students s ").list();
发现报错了,带构造函数的查询和fetch的查询不能同时存在
二。多对多 之 内连接
迫切内连接
session.createQuery("from domain.Classes c inner join fetch c.students s ");
迫切左外连接
session.createQuery("from domain.Classes c left join fetch c.students s ");
三。一对多 + 多对多
(1)看下映射文件
<class name="domain.Student" table="STUDENT"> <cache usage="read-only"/> <id name="id" type="java.lang.Integer"> <column name="ID" /> <generator class="increment" /> </id> <property name="name" type="java.lang.String"> <column name="NAME" /> </property> <set name="course" cascade="save-update" table="STUDENT_COURSE"> <key column="studentID"></key> <many-to-many class="domain.Course" column="courseID"/> </set> <many-to-one name="classes" class="domain.Classes" column="classesID" cascade="save-update"></many-to-one> </class>
(2) 使用
List list=session.createQuery("from domain.Classes c inner join c.students s inner join s.course ").list();