JPA註解介紹

2021-08-20 03:32:27 字數 4316 閱讀 8050

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

@entity

//標識這個pojo是乙個jpa實體

public

class

users

implements

serializable

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

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

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

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

@entity

@table(name = "users") //指定表名為users

public

class

users

implements

serializable

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

public

class

users

implements

serializable

public

class

users

implements

serializable

public

class

users

implements

serializable

可選

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

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

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

@basic(optional=false) 

public string getaddress()

可選

@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 = "user_code", nullable = false, length=32)//設定屬性usercode對應的字段為user_code,長度為32,非空     

private string usercode;

@column(name = "user_wages", nullable = true, precision=12, scale=2)//設定屬性wages對應的字段為user_wages,12位數字可保留兩位小數,可以為空

private

double wages;

@temporal(temporaltype.date)//設定為時間型別

private date joindate;

可選

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

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

@transient     

private

int tempvalue;

public

intgettempvalue()

public

void

settempvalue(int

value)

可選

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

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

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

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

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

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

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

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

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

有t_one和t_many兩個表,他們是一對多的關係,註解範例如下

// 主pojo 

@entity

@table(name = "t_one")

public

class

oneimplements

serializable , inversejoincolumns = )

private collectionmanybidcollection;

// 第二個pojo

@entity

@table(name = "t_manyb")

public

class

manyb

implements

serializable

@entity

public

class

engineer

extends

employee

@entity

public

class

manager

extends

employee

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

}

在載入資料的時候可以為其指定順序,使用@orderby註解實現

@table(name = "users")     

public

class

user

大字段

@lob

//對應blob欄位型別

@column(name = "photo")

private serializable photo;

@lob

//對應clob欄位型別

@column(name = "description")

private string description;

jpa 資料庫對映註解介紹

1 entity name entityname 必須,name為可選,對應資料庫中一的個表 2 table name catalog schema 可選,通常和 entity配合使用,只能標註在實體的class定義處,表示實體對應的資料庫表的資訊 name 可選,表示表的名稱.預設地,表名和實體名...

JPA註解補充

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

JPA註解查詢

1 entity name entityname 必須,name為可選,對應資料庫中一的個表 entity 標識這個pojo是乙個jpa實體 public class users implements serializable 2 table name catalog schema 可選,通常和 e...