JPA實體類中的常用註解

2021-08-19 16:36:48 字數 3555 閱讀 6153

@entity

@entity標記在類名上面,作為實體類的標識

@table

當實體類與其對映的資料庫表名不同名時需要使用 @table 標註說明,該標註與 @entity 標註並列使用,置於實體類宣告語句之前,可寫於單獨語句行,也可與宣告語句同行。

@table 標註的常用選項是 name,用於指明資料庫的表名

@table標註還有乙個兩個選項 catalog 和 schema 用於設定表所屬的資料庫目錄或模式,通常為資料庫名。uniqueconstraints選項用於設定約束條件,通常不須設定。

@id

@id設定物件表示符,標識的實體類的屬性對映對應表中的主鍵

@generatedvalue

設定識別符號的生成策略,常與@id一起使用

引數:strategy指定具體的生成策略

方式一:@generatedvalue(strategy=generationtype.auto) 也是預設策略, 即寫成@generatedvalue也可;

類似於hibernate的native策略,生成方式取決於底層的資料庫。

方式二:@generatedvalue(strategy = generationtype.identity)指定「自動增長」策略,適用於mysql;

方式三:@generatedvalue(strategy = generationtype.sequence, generator = 「seq_tbl_person」)指定「序列」策略,常用於oracle,其中generator表示生成器的名字。而且還要指定@sequencegenerator(name = 「seq_tbl_person」, sequencename = 「seq_tbl_person」, allocationsize = 1)註解配合使用

其中name指定生成器的名字(與generator的值一樣),sequencename指定資料庫中定義序列的名字,allocationsize指定序列每次增長1

@column

描述資料庫表中該字段的定義,具有一下屬性

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欄位型別,該屬性非常有用。

@orderby

在載入資料的時候可以為其指定順序。

@transient

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

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

@onetoone

描述乙個一對一的關聯

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

cascade:表示級聯操作策略

@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也應該被全部刪除

@manytomany

描述乙個多對多的關聯.多對多關聯上是兩個一對多關聯,但是在manytomany描述中,中間表是由orm框架自動處理

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

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

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

@joincolumn

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

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

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

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

@jointable(name = 「student_teacher」, inversejoincolumns = @joincolumn(name = 「tid」), joincolumns = @joincolumn(name = 「sid」))

可選由第三張表來維護兩張表的關係

name:是關係表的名字

joincolumns:自己這一端的主鍵

inversejoincolumns:對方的主鍵

可選@embedded

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

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

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

address物件必須定義為@embededable

Hibernate 實體類註解

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

spring hibernate 實體類註解問題

com.nfschina.ny.entity.在spring2.5.6版中,加入了packagestoscan屬性,它是根據value中定義的路徑來掃瞄其下所有的註解實體類。它只能匹配某一型別的路徑,而不是所有路徑。比如上面的value值表示,掃瞄entity包下面的所有包中的註解類,如果你將類直接...

model實體類中Hibernate註解說明

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