5.多對多關聯對映
阿新 • • 發佈:2018-12-17
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[email protected](name="STUDENTID"), inverseJoinColumns[email protected](name="COURSEID")) 在Course類的 studentSet 屬性上配置: @ManyToMany(mappedBy="course") @ManyToMany:表明多對多關聯關係。 @JoinTable name:指定關聯表。 joinColumns:指向實體對應表的外來鍵。 inverseJoinColumns:指向所關聯的實體對應表的外來鍵。 @ManyToMany mappedBy:表示關聯關係由Student維護。