Hibernate -- 註解(Annotation)關係映射

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")

/**

 * 多對多,雙向關聯映射

 */

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章