1.实体多对多关联
两个实体型之间的联系:
多对多联系(m:n)
定义:
如果对于实体集A中的每一个实体,实体集B中有n个实体(n≥0)与之联系,反之,对于实体集B中的每一个实体,实体集A中也有m个实体(m≥0)与之联系,则称实体集A与实体B具有多对多联系,记为m:n。
2.数据库多对多关联(两个表的关系是必须得拆成三个表的)
Student.java public class Student { private int id; private String name; private String studentNo; private Set<Course> courseSet = new HashSet<Course>(); ...... }
Course.java public class Course { private Integer id; private String name; // 课程名称 private int credit; // 学分 private Set<Student> studentSet = new HashSet<Student>(); ...... }
Student.hbm.xml <set name="courseSet" table="STUDENTCOURSE" inverse="false"> <key column="STUDENTID"/> <many-to-many class="Course" column="COURSEID"/> </set>
Course.hbm.xml <set name="studentSet" table="STUDENTCOURSE" inverse="true"> <key column="COURSEID"/> <many-to-many class="Student" column="STUDENTID"/> </set>
<set>元素属性。
name属性:指定类的属性名;
table属性:指定多对多关联关系中间表;
cascade级联操作属性:save-update、delete、all、none。
<set>子元素。
<key>元素:设定实体类对应表的外键;
<many-to-many>元素中class属性:设定关联类型。
inverse 是 Hibernate 中双向关联关系中的基本概念,用来设置关系由哪一方来维护。
inverse=true 表示被控方,=false 表示主控方;
在多对多关系中需要设置哪一方为被控方,即设置inverse=true 。
使用注解映射多对多关系: 在Student类的 courseSet属性上配置, @ManyToMany @JoinTable(name="STUDENTCOURSE", joinColumns=@JoinColumn(name="STUDENTID"), inverseJoinColumns=@JoinColumn(name="COURSEID")) 在Course类的 studentSet 属性上配置: @ManyToMany(mappedBy="course") @ManyToMany:表明多对多关联关系。 @JoinTable name:指定关联表。 joinColumns:指向实体对应表的外键。 inverseJoinColumns:指向所关联的实体对应表的外键。 @ManyToMany mappedBy:表示关联关系由Student维护。