数据库中的多对多关联关系反映在这种情况下:
比如说,一个学生上多门课,一门课有多个学生学****这就是多对多关联。
那么从数据库的角度,我们如何来设计数据库表结构以实现多对多的关联关系呢?
如果设计成下面的样子;
student
id
name
course_id
1
罗锅
2
course
id
name
student_id
2
Java
1
上面的表结构设计的不合理
hibernate会使用一个中间关联表来优化表设计结构:
student_course
student_id
course_id
1
2
将学生id和课程id联合作为主键。
首先来设计POJO类
Student类:id name Set<Course>类型的属性courses
Course类:id name Set<Student> 类型的属性students
上面的类均生成Getter和Setter方法
接下来,我们设计映射文件:
<class name="Student">
<id name="id">
<generator class="native" />
</id>
<property name="name" />
<set name="courses" table="student_course">
<key column="student_id"/>
<many-to-many class="Course" column="course_id"></many-to-many>
</set>
</class>
要从学生查他学的所有课程,需要将学生的id与student_course表中的key属性指定的student_id列关联
,找到所有记录后,要将这些记录的course_id作为外键到课程表中查询相关联的课程记录。这里实际上使用了一对多的关联查询
<class name="Course">
<id name="id">
<generator class="native" />
</id>
<property name="name" />
<set name="students" table="student_course">
<key column="course_id"/>
<many-to-many class="Student" column="student_id"></many-to-many>
</set>
</class>
接下来我们编写一个测试代码,插入两条学生两条课程记录
static void add(){
Session s = null;
Transaction tx = null;
try {
Student s1 = new Student();
("student1");
Student s2 = new Student();
("student2");
Course c1 = new Course();
02多对多关联关系 来自淘豆网www.taodocs.com转载请标明出处.