關係類型總結和對應的註解

1. Hibernate Annotation關係映射有下面幾種類型:
1)一對一外鍵關聯映射(單向)

2)一對一外鍵關聯映射(雙向)

3)一對一主鍵關聯映射(不重要)在這不演示

在實際中不多用,使用註解@PrimaryKeyJoinColumn

意思是說,個人主鍵去參考另一張表中的主鍵,做爲個人主鍵,可是在我測試使用

註解一對一主鍵關聯映射,在生成表的時候,數據庫中並無生成關聯,使用XML

映射能夠生成。Annotation註解一對一主鍵關聯映,有些bug。不過沒空去研究它。

由於在實際開發中一對一不多用。在實際開發中我機會沒有用過,主鍵關聯就更少了

4)多對一關聯映射

5)一對多關聯映射(單向)

6)一對多關聯映射(雙向)

7)多對多關聯映射(單向)

8)多對多關聯映射(雙向)

 

2.介紹各類映射用法

1)一對一外鍵關聯映射(單向)

@OneToOne(cascade=CascadeType.ALL)

@JoinColumn(name="userid",unique=true)

//一對一外鍵關聯,使用@OneToOne,並設置了級聯操做

//@JoinColum設置了外鍵的名稱爲userid(數據庫字段名),若是不設置,則默認爲另外一類的屬性名+ _id

 //外鍵的值是惟一的(unique),不可重複,與另外一類的主鍵一直

 

2)一對一外鍵關聯映射(雙向)

 Class1裏與上面同樣,  

   Class2:

@OneToOne(mappedBy="class2",cascade=CascadeType.ALL)

//一對一雙向關聯關係,使用@OneToOne

//注意:須要加上mappedBy="class2",若是不加上的話,

//Class2也會生成一個外鍵(class1_id)

//mappedby="class2"須要指向與他關聯對象的一個屬性

//說明雙向關聯關係中,有且僅有一端是做爲主體(owner)端存在的

//主體端負責維護聯接列

//對於不須要維護這種關係的從表則經過mappedBy屬性進行聲明

//mappedBy的值指向主體的關聯屬性

//規律:只有是雙向關聯關係,都加上mappedby

    //cascade=CascadeType.ALL級聯

 

4)多對一關聯映射

在多的一端配置:

@ManyToOne(targetEntity=Organization.class)

@JoinColumn(name="orgid")

//多對一註解@ManyToOne

//targetEntity指定了關聯對象

//@JoinColumn(name="orgid")指定生產的外鍵的字段名,默認是org_id

 

5)一對多關聯映射(單向)


@OneToMany

@JoinColumn(name="orgid")

/**

 * 一對多註解@OneToMany(單向)

 * 若是隻寫@OneToMany的話,hibernate會建一張中間表來

 * 維護他們之間的關係,

 * 加上@JoinColumn(name="orgid"),則不會建中間表,他會在

 * 多的一端加上外鍵orgid,來維護他們之間的關係

 */

6)一對多關聯映射(雙向)

一端:


@OneToMany(mappedBy="org")

@JoinColumn(name="orgid")

/**

 * 一對多雙向,在一的一端中設置mappedBy

 * 說明多的一端爲主導

 * 若是指定了外鍵字段名稱,則多的一端也須要指定相同的字段名稱

 */

 

多端:

@ManyToOne

@JoinColumn(name="orgid")

/**

 * 一對多雙向

 * 須要指定外鍵與一的一端給的外鍵名稱一致,@JoinColumn(name="orgid")

 * 也能夠不指定,若是在多的一端不指定,則一的一端也不能指定

 * 不然爲生成兩個外鍵

 */

 

7)多對多關聯映射(單向)


 

@ManyToMany

/**

 * 多對多映射:註解@ManyToMany(單向)

 * 默認狀況下,hibernate會自動的建立一張中間表,

 * 來維護多對多關係

 * 默認中間表的名稱 :user_role中間表,字段的名稱user_id role_id

 * 若是想更換表名和字段名稱,註解以下:

 */

@JoinTable(name="t_u_r",

joinColumns={@JoinColumn(name="u_id")},

inverseJoinColumns={@JoinColumn(name="r_id")}

)

 

8)多對多關聯映射(雙向)  User端


@ManyToMany

/**

 * 多對多映射:註解@ManyToMany(單向)

 * 默認狀況下,hibernate會自動的建立一張中間表,

 * 來維護多對多關係

 * 默認中間表的名稱 :user_role中間表,字段的名稱user_id role_id

 * 若是想更換表名和字段名稱,註解以下:

 */

@JoinTable(name="t_u_r",

joinColumns={@JoinColumn(name="u_id")},

inverseJoinColumns={@JoinColumn(name="r_id")}

)

/**

 * @JoinTable(name="t_u_r",

 * 指定中間表的表名

 * joinColumns={@JoinColumn(name="u_id")},

 * 指定當前對象的外鍵

 * inverseJoinColumns={@JoinColumn(name="r_id")}

 * 指定關聯對象的外鍵

 */

 

Role端

@ManyToMany(mappedBy="role")

/**

 * 多對多,雙向關聯映射

 */
相關文章
相關標籤/搜索