JPA註解詳解三

2021-06-09 00:11:49 字數 4721 閱讀 2931

@columnresult

執行 @namednativequery

時,它可以返回實體(包括不同型別的實體)、標量值或實體和標量值的組合。

使用 @columnresult 批註返回標量值。標量型別由您在 @columnresult 中標識的列型別確定。

有關詳細資訊,另請參閱 @entityresult

、@fieldresult

。表 1-8 

列出了此批註的屬性。有關更多詳細資訊,請參閱 api

。表 1-8 @columnresult 屬性

屬性

必需

說明

name

在原生 sql 查詢的 select 語句中將 name 設定為列名的 string 等效形式。如果在 select中使用列別名( as 語句),則將 name 設定為列別名。

示例 1-9 

顯示了如何使用此批註將 item (請參閱示例 1-10 

)標量 name 包含在結果列表(請參閱示例 1-11 

)中。在該示例中,結果列表將為 object 陣列的 list ,如:  。

示例 1-9 使用 @columnresult 的 order 實體

示例 1-10 item 實體

@entity

public class item

query q = entitymanager.createnativequery(

"select o.id       as order_id, " +

"o.quantity as order_quantity, " +

"o.item     as order_item, " + 

"i.name     as item_name, " +

"from order o, item i " +

"where (order_quantity > 25) and (order_item = i.id)",

"orderresults"

);list resultlist = q.getresultlist(); 

// list of object arrays:

@discriminatorcolumn

預設情況下,當 @inheritance

屬性策略為 inheritancetype.single_table 或 joined 時,jpa 持續性提供程式將建立乙個名為 dtype 的識別符號列以區分繼承層次中的類。

使用 @discriminatorcolumn 批註:

表 1-9 

列出了此批註的屬性。有關更多詳細資訊,請參閱 api

。表 1-9 @discriminatorcolumn 屬性

屬性

必需

說明

columndefinition

預設值:空 string 。

預設情況下,jpa 持續性提供程式使用最少量 sql 建立乙個資料庫表列。

如果需要使用更多指定選項建立的列,請將 columndefinition 設定為在針對列生成ddl 時希望 jpa 使用的 sql 片斷。

discriminatortype

預設值: discriminatortype.string 。

預設情況下,jpa 持續性提供程式假設識別符號型別為 string 。

如果要使用其他型別,請將 discriminatortype 設定為 discriminatortype.char或 discriminatortype.integer 。

您的 @discriminatorvalue

必須符合此型別。

length

預設值: 31

預設情況下,jpa 持續性提供程式假設識別符號列在用於儲存 string 值時的最大長度為255 個字元。

如果該列不適合於您的應用程式或資料庫,請將 length 設定為適合於您的資料庫列的int 值。

您的 @discriminatorvalue

必須符合此長度。

name

預設值:jpa 持續性提供程式假設識別符號列名為「 dtype 」 。

要指定其他列名,請將 name 設定為所需的 string 列名。

示例 1-12 

顯示了如何使用此批註指定乙個名為 disc 、型別為 string 、長度為 20 的識別符號列。在本示例中,該類的 @discriminatorvalue

指定為 cust 。示例 1-13 

中的子類將它自己的 @discriminatorvalue

指定為vip 。在 customer 和 valuedcustomer 中,@discriminatorvalue

的值必須可以轉換為由@discriminatorcolumn

屬性 discriminatortype 指定的型別,並且必須符合 @discriminatorcolumn

屬性length 。

示例 1-12 @discriminatorcolumn 和 @discriminatorvalue — 根類

@entity

@table(name="cust")

@inheritance(strategy=single_table)

@discriminatorcolumn(name="disc", discriminatortype=string, length=20)

@discriminatorvalue(value-"cust")

public class customer

示例 1-13 @discriminatorvalue — 子類

@entity

@discriminatorvalue(value="vip")

public class valuedcustomer extends customer

@discriminatorvalue

預設情況下,當 @inheritance

屬性策略為 inheritancetype.single_table 或 joined 時,jpa 持續性提供程式使用 @discriminatorcolumn

按實體名稱區分繼承層次中的類(請參閱 @entity

)。使用 @discriminatorvalue 批註指定用於區分此繼承層次中的實體的識別符號值:

表 1-10 

列出了此批註的屬性。有關更多詳細資訊,請參閱 api

。表 1-10 @discriminatorvalue 屬性

屬性

必需

說明

value

將 value 設定為符合 @discriminatorcolumn

屬性 discriminatortype 和 length 的識別符號值的string 等效形式。

示例 1-14 

顯示了如何使用此批註指定乙個名為 disc 、型別為 string 、長度為 20 的識別符號列。在本示例中,該類的 @discriminatorvalue

指定為 cust 。示例 1-15 

中的子類將它自己的 @discriminatorvalue

指定為vip 。在 customer 和 valuedcustomer 中,@discriminatorvalue

的值必須可以轉換為由@discriminatorcolumn

屬性 discriminatortype 指定的型別,並且必須符合 @discriminatorcolumn

屬性length 。

示例 1-14 @discriminatorcolumn 和 @discriminatorvalue — 根類

@entity

@table(name="cust")

@inheritance(strategy=single_table)

@discriminatorcolumn(name="disc", discriminatortype=string, length=20)

@discriminatorvalue(value-"cust")

public class customer

示例 1-15 @discriminatorvalue — 子類

@entity

@discriminatorvalue(value="vip")

public class valuedcustomer extends customer

@embeddable

預設情況下,jpa 持續性提供程式假設每個實體均持久儲存到它自己的資料庫表。

使用 @embeddable 批註指定乙個類,該類的例項儲存為擁有實體的固有部分並共享該實體的身份。嵌入物件的每個持久屬性或字段都將對映到實體的資料庫表。

此批註沒有屬性。有關更多詳細資訊,請參閱 api

。示例 1-16 

顯示了如何使用此批註指定:類 employmentperiod 在用作批註為 @embedded

的持久欄位的型別時可以巢狀到實體中(請參閱示例 1-17 

)示例 1-16 @embeddable

@embeddable

public class employmentperiod

JPA註解詳解二

transient 預設情況下,jpa 持續性提供程式假設實體的所有欄位均為持久字段。使用 transient 批註指定實體的非持久欄位或屬性,例如,乙個在執行時使用但並非實體狀態一部分的字段或屬性。jpa 持續性提供程式不會對批註為 transient 的屬性或字段持久儲存 或建立資料庫模式 該批...

JPA註解詳解 二

transient 預設情況下,jpa 持續性提供程式假設實體的所有欄位均為持久字段。使用 transient 批註指定實體的非持久欄位或屬性,例如,乙個在執行時使用但並非實體狀態一部分的字段或屬性。jpa 持續性提供程式不會對批註為 transient 的屬性或字段持久儲存 或建立資料庫模式 該批...

JPA註解補充

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