1. 程式人生 > >5.多對多關聯對映

5.多對多關聯對映

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維護。