hibernate註解版關聯對映

2021-06-06 17:05:48 字數 4885 閱讀 9239

屬性介紹:

1.多對一:

@manytoone(fetch=fetchtype,cascade=cascadetype)

@manytoone表示乙個多對一的對映,該註解標註的屬性通常是資料庫表的外來鍵

optional:是否允許該字段為null,該屬性應該根據資料庫表的外來鍵約束來確定,預設為true

fetch:表示抓取策略,預設為fetchtype.eager

cascade:表示預設的級聯操作策略,可以指定為all,persist,merge,refresh和remove中的若干組合,預設為無級聯操作

targetentity:表示該屬性關聯的實體型別.該屬性通常不必指定,orm框架根據屬性型別自動判斷targetentity.

示例:

@manytoone表示乙個多對一的對映,該註解標註的屬性通常是資料庫表的外來鍵

optional:是否允許該字段為null,該屬性應該根據資料庫表的外來鍵約束來確定,預設為true

fetch:表示抓取策略,預設為fetchtype.eager

cascade:表示預設的級聯操作策略,可以指定為all,persist,merge,refresh和remove中的若干組合,預設為無級聯操作

targetentity:表示該屬性關聯的實體型別.該屬性通常不必指定,orm框架根據屬性型別自動判斷targetentity.

示例:

@manytoone表示乙個多對一的對映,該註解標註的屬性通常是資料庫表的外來鍵

optional:是否允許該字段為null,該屬性應該根據資料庫表的外來鍵約束來確定,預設為true

fetch:表示抓取策略,預設為fetchtype.eager

cascade:表示預設的級聯操作策略,可以指定為all,persist,merge,refresh和remove中的若干組合,預設為無級聯操作

targetentity:表示該屬性關聯的實體型別.該屬性通常不必指定,orm框架根據屬性型別自動判斷targetentity.

示例:

//訂單order和使用者user是乙個manytoone的關係 

//在order類中定義

@manytoone()

@joincolumn(name="user")

public user getuser()

2.

@joincolumn

@joincolumn和@column類似,介量描述的不是乙個簡單字段,而一乙個關聯字段,例如.描述乙個@manytoone的字段.

name:該字段的名稱.由於@joincolumn描述的是乙個關聯字段,如manytoone,則預設的名稱由其關聯的實體決定.

例如,實體order有乙個user屬性來關聯實體user,則order的user屬性為乙個外來鍵,

其預設的名稱為實體user的名稱+下劃線+實體user的主鍵名稱

示例:見@manytoone

3.一對多:

@onetomany(fetch=fetchtype,cascade=cascadetype) 

@onetomany描述乙個一對多的關聯,該屬性應該為集體型別,在資料庫中並沒有實際欄位.

fetch:表示抓取策略,預設為fetchtype.lazy,因為關聯的多個物件通常不必從資料庫預先讀取到記憶體

cascade:表示級聯操作策略,對於onetomany型別的關聯非常重要,通常該實體更新或刪除時,其關聯的實體也應當被更新刪除

例如:實體user和order是onetomany的關係,則實體user被刪除時,其關聯的實體order也應該被全部刪除

示例:

@onetomany描述乙個一對多的關聯,該屬性應該為集體型別,在資料庫中並沒有實際欄位.

fetch:表示抓取策略,預設為fetchtype.lazy,因為關聯的多個物件通常不必從資料庫預先讀取到記憶體

cascade:表示級聯操作策略,對於onetomany型別的關聯非常重要,通常該實體更新或刪除時,其關聯的實體也應當被更新刪除

例如:實體user和order是onetomany的關係,則實體user被刪除時,其關聯的實體order也應該被全部刪除

示例:

@onetymany(cascade=all) 

public list getorders()

4.

@onetoone(fetch=fetchtype,cascade=cascadetype)

@onetoone描述乙個一對一的關聯

fetch:表示抓取策略,預設為fetchtype.lazy

cascade:表示級聯操作策略

示例:

@onetoone描述乙個一對一的關聯

fetch:表示抓取策略,預設為fetchtype.lazy

cascade:表示級聯操作策略

示例:

@onetoone(fetch=fetchtype.lazy) 

public blog getblog()

5.

@manytomany 

@entity 

public class user

public void setbooks(list books)

}

@entity

public class book

public void setusers(list users)

}

以下列出基本用法解析:

@onetoone

一對一的主鍵關聯實在看不出意義何在.反倒是獲取例項的時候可能多n多沒用的資料,所以不深究了...至於外來鍵關聯,直接看下面的一對多,多對一.

表字段說明

oneobject 表:

one_id 主鍵

manyobject 表:

many_id 主鍵

one_id 外來鍵,與oneobject 的主鍵關聯

單向一對多

oneobject:

@onetomany

@joincolumn(name="one_id")

private setmb = new hashset();

manyobject:

private int one_id; //這個就是和 @joincolumn(name="one_id") 對應的 one_id .

不需要註解.

單向多對一

oneobject:

不需要註解.

manyobject:

@manytoone

@joincolumn(name="one_id") //只需要在manyobject指定外來鍵為one_id.它就會去找 oneobject 的主鍵來對應.

private oneobject one;

雙向一對多,雙向多對一

oneobject:

private setmb = new hashset();

manyobject:

@manytoone

@joincolumn(name="one_id") //注意,在這裡指定外鍵名後,不要在 寫 private int one_id; 和它的get / set 方法了.這個改由hibernate維護.寫上是要報錯的.

表字段說明

manya 表:

a_id 主鍵

manyb 表:

b_id 主鍵

a_b 表:(儲存對映關係的中間表)

t_aid 外來鍵,與manya 的主鍵關聯

t_bid 外來鍵,與manyb 的主鍵關聯

單向多對多

manya

:@manytomany

@jointable(

name="a_b", //中間表名

joincolumns=, //設定manya自己在中間表的對應外來鍵

inversejoincolumns=)

private setmb = new hashset();

manyb

:不需要註解.

雙向多對多

manya

:@manytomany

@jointable(

name="a_b", //中間表名

joincolumns=, //設定manya自己在中間表的對應外來鍵

inversejoincolumns=)

private setmb = new hashset();

manyb

:private setma = new hashset();

注:以上注釋,manya的更刪會影響到中間表a_b.但manyb的更刪不會影響到.假如2邊都需要影響a_b表,則manyb也寫註解.注意 joincolumns 以及 inversejoincolumns 的值對應不同.(其實就是兩邊都做成單向多對多)

manyb

:@manytomany

@jointable(

name="a_b",

joincolumns=,

inversejoincolumns=)

private setma = new hashset();

Hibernate註解配置N N關聯

多對多 通過 manytomany 註解定義多對多關係,同時通過 jointable 註解描述關聯表和關聯條件。其中一端定義為 owner,另一段定義為 inverse 對關聯表進行更新操作,這段被忽略 entity public class employer implements serializ...

Hibernate註解配置1 N關聯

多對一 使用 manytoone 註解定義多對一關係。entity public class flight implements serializable joincolumn name comp id public company getcompany 其中 joincolumn 註解是可選的,關...

Hibernate基於註解實現自關聯樹形結構實現

很久沒用過hibernate了,專案需求需要使用,並建立樹形結構,在開發中遇到一些問題,在這裡記錄一下。1 建立資料庫表,主要是設定標誌資訊,不然插入資料庫會報id不能插入null的錯誤。2 建立bean實體,這裡省略了get,set,但一定不要忘記建立。joincolumn用於配置關聯項,不配置資...