@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 類有兩個屬...