JPA 基本註解

2021-09-19 13:30:25 字數 1510 閱讀 9037

註解名

功能@entity

使乙個類成為實體類,將對映到指定的資料庫表

例如如果註解到實體類customer上,將會對映到customer表上

@table(name=「jpa_customers」)

實體類與其對映的資料庫表名預設一樣的,使用這個註解可以自定義類對應的表的名字。

例如左邊這個註解就是將表名改為了jpa_customers

需要和@entity註解並列使用

@id宣告乙個實體類的屬性為資料庫的主鍵列

要加到get方法上

@generatedvalue

通過註解的strategy屬性指定主鍵的生成策略,

mysql對應的是autoincrement

@column

實體的屬性與其對映的資料庫表的列不同名時使用

@transient

實體類中的方法我們都是缺省會在資料庫中新增欄位的,如果不希望自動新增該欄位的話,可以在方法上方新增該註解

@temporal

調整時間型別引數的時間精度,

有date、time、timestamp三種精度

一些例子:

@column

(name=

"person_id"

,length=

10,nullable=

false

)@generatedvalue

(strategy=generationtype.auto)

@idpublic integer getpersonid()

首先類的屬性personid在資料庫中欄位名為"person_id",字段長度為10,不可為空

然後這個屬性是表的主鍵列(@id)

最後這個主鍵列的生成策略是auto increment

// 工具方法,不需要對映為表的乙個字段

@transient

public string getinfo()

這裡的getinfo()方法是或者實體的一些資訊,但是只要是在實體類中的方法,jpa都會嘗試將屬性加入到資料庫表中乙個欄位中去。如果該方法上方不新增transient註解,則資料庫會存在"info"欄位的資料,或者執行時直接報錯。加了@transient之後,getinfo()就只是乙個普通的方法了。

@temporal

(temporaltype.date)

public date getbirth()

@temporal

(temporaltype.timestamp)

public date getcreatedtime()

上面兩個方法是獲得使用者的生日和當前的乙個時間點。如果不新增註解@temporal,兩個日期都會精確到年月日小時分鐘秒,但是在getbirth()這個方法上方加上註解@temporal(temporaltype.date)後,獲得的日期就只會精確到年月日,不會到小時分秒。

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...

JPA實體註解

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