hibernate——多对多映射

来源:互联网 发布:isignature签章软件v8 编辑:程序博客网 时间:2024/06/08 16:12

其实不管是什么映射,很关键的一点就是表之间是如何产生映射的。映射关系的产生,关键是在映射文件中配置的,用特定的标签产生特定的映射关系,多对多也不例外。多对多的映射关系,都是转换成多对一的关系,即新增了一个表,来存储两个表之间的关系。此处,我们举一个老师和学生的关系,关键来分析一下,两者是如何产生多对多的映射关系的。

先建立两个类:Teacher和Student

public class Teacher {private int id;private String name;private Set<Student> students;        ……//set/get方法}
public class Student {private int id;private String name;private Set<Teacher> teachers;        ……//set/get方法}
多对多关系的建立,在两个类中,首先要各自包含对方的属性,由于是多对多,所以是一个集合对象。这个是建立映射关系的基础。


然后就是对应的映射文件了:

Teacher.hbm.xml:<hibernate-mapping package="com.suo.domain"><class name="Teacher"><id name="id"><generator class="native"/></id><property name="name"/><set name="students" table="teacher_student">   <key column="teacher_id"/>      <!--key是将Teacher类对应的表的主键,作为teacher_student表的一个外键,column只是起到一个命名的作用 -->   <many-to-many class="Student" column="student_id"/>      <!--many-to-many是将Student类对应的表的主键,作为teacher_student表的一个外键,column只是起到一个命名的作用--></set><!--对set这个标签的初步理解:name指定了类中的属性的名字,table指定了这个属性要映射到的表 。key标签指定了本类所对应表的主键,要作为table所指定表的一个外键,并且命名这个外键。<many-to-many>标签指定了和本类产生多对多关系的类,并且指定了这个类所对应的表的主键作为在table所指定表中的一个外键,并且命名这个外键 --></class></hibernate-mapping>
Student.hbm.xml:<hibernate-mapping package="com.suo.domain"><class name="Student"><id name="id"><generator class="native"/></id><property name="name"/><set name="teachers" table="teacher_student"><key column="student_id"/><many-to-many class="Teacher" column="teacher_id"/></set></class></hibernate-mapping>
由配置文件我们可以知道,这里建立的是一个双向的映射关系,即在两个映射文件中,都指定了对方的属性。没有主从表之分。需要理解的是,要在数据库中建立一个中间关系的表,如本例中的teacher_student表,只需要配置一个映射文件就行了。至于另一个文件也做了类似的配置,是因为要建立一个双向的关系,在查询的时候,就可以进行双向的查询。



原创粉丝点击