hibernate 註解方式配置實體的對映

2021-08-14 13:58:52 字數 4567 閱讀 3918

hibernate註解

1。@entity(name="entityname")

必須,name為可選,對應資料庫中一的個表

2、@table(name="",catalog="",schema="")

可選,通常和@entity配合使用,只能標註在實體的class定義處,表示實體對應的資料庫表的資訊

name:可選,表示表的名稱.預設地,表名和實體名稱一致,只有在不一致的情況下才需要指定表名

catalog:可選,表示catalog名稱,預設為catalog("").

schema:可選,表示schema名稱,預設為schema("").

3、@id

必須@id定義了對映到資料庫表的主鍵的屬性,乙個實體只能有乙個屬性被對映為主鍵.置於get***x

()前.

4、@generatedvalue(strategy=generationtype,generator="")

可選strategy:表示主鍵生成策略,有auto,indentity,sequence 和 table 4種,分別表示讓orm

框架自動選擇,

根據資料庫的identity欄位生成,根據資料庫表的sequence欄位生成,以有根據乙個額外的表生

成主鍵,預設為auto

generator:表示主鍵生成器的名稱,這個屬性通常和orm框架相關,例如,hibernate可以指定

uuid等主鍵生成方式.

示例:@id

@generatedvalues(strategy=strategytype.sequence)

public int getpk()

5、@basic(fetch=fetchtype,optional=true)

可選@basic表示乙個簡單的屬性到資料庫表的字段的對映,對於沒有任何標註的get***x()方法,預設

即為@basic

fetch: 表示該屬性的讀取策略,有eager和lazy兩種,分別表示主支抓取和延遲載入,預設為

eager.

optional:表示該屬性是否允許為null,預設為true

示例:@basic(optional=false)

public string getaddress()

6、@column

可選@column描述了資料庫表中該字段的詳細定義,這對於根據jpa註解生成資料庫表結構的工具非常

有作用.

name:表示資料庫表中該字段的名稱,預設情形屬性名稱一致

nullable:表示該欄位是否允許為null,預設為true

unique:表示該欄位是否是唯一標識,預設為false

length:表示該字段的大小,僅對string型別的字段有效

insertable:表示在orm框架執行插入操作時,該欄位是否應出現insetrt語句中,預設為true

updateable:表示在orm框架執行更新操作時,該欄位是否應該出現在update語句中,預設為

true.對於一經建立就不可以更改的字段,該屬性非常有用,如對於birthday欄位.

columndefinition:表示該字段在資料庫中的實際型別.通常orm框架可以根據屬性型別自動判

斷資料庫中字段的型別,但是對於date型別仍無法確定資料庫中欄位型別究竟是date,time還是

timestamp.此外,string的預設對映型別為varchar,如果要將string型別對映到特定資料庫的

blob或text欄位型別,該屬性非常有用.

示例:@column(name="birth",nullable="false",columndefinition="date")

public string getbithday()

7、@transient

可選@transient表示該屬性並非乙個到資料庫表的字段的對映,orm框架將忽略該屬性.

如果乙個屬性並非資料庫表的字段對映,就務必將其標示為@transient,否則,orm框架預設其注

解為@basic

示例://根據birth計算出age屬性

@transient

public int getage()

8、@manytoone(fetch=fetchtype,cascade=cascadetype)

可選@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()

9、@joincolumn

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

@manytoone的字段.

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

其關聯的實體決定.

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

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

示例:見@manytoone

10、@onetomany(fetch=fetchtype,cascade=cascadetype)

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

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

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

關聯的實體也應當被更新或刪除

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

被全部刪除

示例:@onetymany(cascade=all)

public list getorders()

11、@onetoone(fetch=fetchtype,cascade=cascadetype)

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

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

cascade:表示級聯操作策略

示例:@onetoone(fetch=fetchtype.lazy)

public blog getblog()

12、@manytomany

可選@manytomany 描述乙個多對多的關聯.多對多關聯上是兩個一對多關聯,但是在manytomany描述

中,中間表是由orm框架自動處理

targetentity:表示多對多關聯的另乙個實體類的全名,例如:package.book.class

示例:user實體表示使用者,book實體表示書籍,為了描述使用者收藏的書籍,可以在user和book之間

建立manytomany關聯

@entity

public class user

public void setbooks(list books)

}@entity

public class book

public void setusers(list users)

}兩個實體間相互關聯的屬性必須標記為@manytomany,並相互指定targetentity屬性,

targetentity的集合屬性名稱

利用orm工具自動生成的表除了user和book表外,還自動生成了乙個user_book表,用於實現多對

多關聯可選

示例:public class employee()

@entity

public class engineer extendsemployee

@entity

public class manager extends employee

14、@embedded

可選@embedded將幾個字段組合成乙個類,並作為整個entity的乙個屬性.

例如user包括id,name,city,street,zip屬性.

我們希望city,street,zip屬性對映為address物件.這樣,user物件將具有id,name和

address這三個屬性.

address物件必須定義為@embededable

示例:@embeddable

public class address

@entity

public class user

}

hibernate聯合主鍵 註解方式

1 方法一 主鍵類用 embeddable,pojo類仍然用 entity但是引用主鍵類的物件用 id 主鍵pojo類 embeddable public class composeidpk implements serializable column length 10,name uuid pub...

hibernate聯合主鍵註解方式

方法一 主鍵類用 embeddable,pojo類仍然用 entity但是引用主鍵類的物件用 id 主鍵pojo類 embeddable public class composeidpk implements serializable column length 10,name uuid publi...

Hibernate註解配置N N關聯

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