一对多关系可以分为单向和双向。
单向映射:
单向就是只能从一方找到另一方,通常是从主控类找到拥有外键的类(表)。比如一个班级可以有多个学生,并且学生有班级的主键作为外键。班级与学生的关系就是一对多的关系。如果想对班级信息的操作同时也反应在其学生信息上那么可以在班级类配置文件的集合属性上配置cascade="all",表示对关联实体进行级联更新配置。一对多关联映射的映射原理是在多的一端加入一个外键,指向一的一端。
Classes.hbm.xml文件配置如下:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
<span style="white-space:pre"> </span>"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
<span style="white-space:pre"> </span>"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<span style="white-space:pre"> </span><class name="com.bjpowernode.hibernate.Classes" table="t_classes">
<span style="white-space:pre"> </span><id name="id">
<span style="white-space:pre"> </span><generator class="native"/>
<span style="white-space:pre"> </span></id>
<span style="white-space:pre"> </span><property name="name"/>
<span style="white-space:pre"> </span><set name="students">
<span style="white-space:pre"> </span><!--
<span style="white-space:pre"> </span><key column="classesid" not-null="true"/>
<span style="white-space:pre"> </span> -->
<span style="white-space:pre"> </span> <key column="classesid"/>
<span style="white-space:pre"> </span><one-to-many class="com.bjpowernode.hibernate.Student"/>
<span style="white-space:pre"> </span></set>
<span style="white-space:pre"> </span></class>
</hibernate-mapping>
Student.hbm.xml文件配置如下:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
<span style="white-space:pre"> </span>"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
<span style="white-space:pre"> </span>"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<span style="white-space:pre"> </span><class name="com.bjpowernode.hibernate.Student" table="t_student">
<span style="white-space:pre"> </span><id name="id">
<span style="white-space:pre"> </span><generator class="native"/>
<span style="white-space:pre"> </span></id>
<span style="white-space:pre"> </span><property name="name"/>
<span style="white-space:pre"> </span></class>
</hibernate-mapping>
双向映射:
Student.hbm.xml文件配置改为如下:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.bjpowernode.hibernate.Student" table="t_student">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<many-to-one name="classes" column="classesid"/>
</class>
</hibernate-mapping>
一对多关联映射和多对一关联映射映射原理是一致的,都是在多的一端加入一个外键,指向一的一端。
它们的区别在于维护的关系不同:
*多对一维护的关系是:多指向一的关系,有了此关系,在加载多的时候可以将一加载上来。
*一对多维护的关系是:一指向多的关系,有了此关系,在加载一的时候可以将多加载上来。