JPA實體註解

2021-08-19 15:15:11 字數 4832 閱讀 2949

@entity(name=」entityname」)

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

@table(name=」」,catalog=」」,schema=」」)

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

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

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

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

@id必須

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

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

@basic(fetch=fetchtype,optional=true)

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

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

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

示例:

@basic(optional=false)

public string getaddress()

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

@transient

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

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

示例:

//根據birth計算出age屬性

@transient

public int getage()

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

@joincolumn

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

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

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

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

示例:見@manytoone

@onetomany(fetch=fetchtype,cascade=cascadetype)

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

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

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

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

示例:

@onetymany(cascade=all)

public list getorders()

@onetoone(fetch=fetchtype,cascade=cascadetype)

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

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

cascade:表示級聯操作策略

示例:

@onetoone(fetch=fetchtype.lazy)

public blog getblog()

/**

* user實體表示使用者,book實體表示書籍,為了描述使用者收藏的書籍,

* 可以在user和book之間建立manytomany關聯

*/@entity

public class user

public void setbooks(list books)

}@entity

public class book

public void setusers(list users)

}

public class employee()

@entity

public class engineer extends employee

@entity

public class manager extends employee

@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驗證註解
註解        適用型別      說明                           示例

@pattern string 通過正規表示式來驗證字串 @attern(regex=」[a-z]」)

@length string 驗證字串的長度 @length(min=3,max=20)

@email string 驗證乙個email位址是否有效 @email

@range long 驗證乙個整型是否在有效的範圍內 @range(min=0,max=100)

@min long 驗證乙個整型必須不小於指定值 @min(value=10)

@max long 驗證乙個整型必須不大於指定值 @max(value=20)

@size 集合或陣列 集合或陣列的大小是否在指定範圍內 @size(min=1,max=255)

以上每個註解都可能性有乙個message屬性,用於在驗證失敗後向使用者返回的訊息,還可以三個屬性上使用多個註解

JPA實體註解

jpa實體註解用例專案位址 參考部落格 關係的擁有方 即many的一方 負責關係的維護,在擁有方建立外來鍵會用到joincolumn。列舉使用manytoone進行實體註解,如建立乙個分類樹形結構的實體。當前實體中manytoone與onetomany對應的實體都是本身 author lx enti...

JPA實體類中的常用註解

entity entity標記在類名上面,作為實體類的標識 table 當實體類與其對映的資料庫表名不同名時需要使用 table 標註說明,該標註與 entity 標註並列使用,置於實體類宣告語句之前,可寫於單獨語句行,也可與宣告語句同行。table 標註的常用選項是 name,用於指明資料庫的表名...

JPA註解補充

fetchtype.lazy和 fetchtype.eager 什麼區別?1 fetchtype.lazy 懶載入,載入乙個實體時,定義懶載入的屬性不會馬上從資料庫中載入。2 fetchtype.eager 急載入,載入乙個實體時,定義急載入的屬性會立即從資料庫中載入。3 比方 user 類有兩個屬...