JPA的基本注解
場(chǎng)景
JPA入門(mén)簡(jiǎn)介與搭建HelloWorld(附代碼下載):
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103473937
在上面搭建JPA的HelloWorld時(shí)在實(shí)體類(lèi)中用到了一些注解
package com.badao.jpa.helloworld;import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table;@Entity @Table(name="JPA_CUSTOMERS") public class Customer {private Integer id;private String lastName;private String email;private int age;@GeneratedValue(strategy = GenerationType.IDENTITY)@Idpublic Integer getId() {return id;}public void setId(Integer id) {this.id = id;}@Column(name="LAST_NAME")public String getLastName() {return lastName;}public void setLastName(String lastName) {this.lastName = lastName;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}那么除此之外JPA還有哪些基本注解
注:
博客主頁(yè):
https://blog.csdn.net/badao_liumang_qizhi
關(guān)注公眾號(hào)
霸道的程序猿
獲取編程相關(guān)電子書(shū)、教程推送與免費(fèi)下載。
實(shí)現(xiàn)
@Entity
@Entity 標(biāo)注用于實(shí)體類(lèi)聲明語(yǔ)句之前,指出該Java 類(lèi)為實(shí)體類(lèi),將映射到指定的數(shù)據(jù)庫(kù)表。如聲明一個(gè)實(shí)體類(lèi) Customer,它將映射到數(shù)據(jù)庫(kù)中的 customer 表上。
@Table
當(dāng)實(shí)體類(lèi)與其映射的數(shù)據(jù)庫(kù)表名不同名時(shí)需要使用 @Table 標(biāo)注說(shuō)明,該標(biāo)注與 @Entity 標(biāo)注并列使用,置于實(shí)體類(lèi)聲明語(yǔ)句之前,可寫(xiě)于單獨(dú)語(yǔ)句行,也可與聲明語(yǔ)句同行。
@Table 標(biāo)注的常用選項(xiàng)是 name,用于指明數(shù)據(jù)庫(kù)的表名
@Table標(biāo)注還有一個(gè)兩個(gè)選項(xiàng) catalog 和 schema 用于設(shè)置表所屬的數(shù)據(jù)庫(kù)目錄或模式,通常為數(shù)據(jù)庫(kù)名。uniqueConstraints 選項(xiàng)用于設(shè)置約束條件,通常不須設(shè)置。
@Id
@Id 標(biāo)注用于聲明一個(gè)實(shí)體類(lèi)的屬性映射為數(shù)據(jù)庫(kù)的主鍵列。該屬性通常置于屬性聲明語(yǔ)句之前,可與聲明語(yǔ)句同行,也可寫(xiě)在單獨(dú)行上。
@Id標(biāo)注也可置于屬性的getter方法之前。
@GeneratedValue
@GeneratedValue? 用于標(biāo)注主鍵的生成策略,通過(guò) strategy 屬性指定。默認(rèn)情況下,JPA 自動(dòng)選擇一個(gè)最適合底層數(shù)據(jù)庫(kù)的主鍵生成策略:SqlServer 對(duì)應(yīng) identity,MySQL 對(duì)應(yīng) auto increment。
在 javax.persistence.GenerationType 中定義了以下幾種可供選擇的策略:
IDENTITY:采用數(shù)據(jù)庫(kù) ID自增長(zhǎng)的方式來(lái)自增主鍵字段,Oracle 不支持這種方式;
AUTO: JPA自動(dòng)選擇合適的策略,是默認(rèn)選項(xiàng);
SEQUENCE:通過(guò)序列產(chǎn)生主鍵,通過(guò) @SequenceGenerator 注解指定序列名,MySql 不支持這種方式
TABLE:通過(guò)表產(chǎn)生主鍵,框架借由表模擬序列產(chǎn)生主鍵,使用該策略可以使應(yīng)用更易于數(shù)據(jù)庫(kù)移植。
@Basic
@Basic 表示一個(gè)簡(jiǎn)單的屬性到數(shù)據(jù)庫(kù)表的字段的映射,對(duì)于沒(méi)有任何標(biāo)注的 getXxxx() 方法,默認(rèn)即為@Basic
fetch: 表示該屬性的讀取策略,有 EAGER 和 LAZY 兩種,分別表示主支抓取和延遲加載,默認(rèn)為 EAGER.
optional:表示該屬性是否允許為null, 默認(rèn)為true
@Column
當(dāng)實(shí)體的屬性與其映射的數(shù)據(jù)庫(kù)表的列不同名時(shí)需要使用@Column 標(biāo)注說(shuō)明,該屬性通常置于實(shí)體的屬性聲明語(yǔ)句之前,還可與 @Id 標(biāo)注一起使用。
@Column 標(biāo)注的常用屬性是 name,用于設(shè)置映射數(shù)據(jù)庫(kù)表的列名。此外,該標(biāo)注還包含其它多個(gè)屬性,如:unique 、nullable、length 等。
@Column 標(biāo)注的 columnDefinition 屬性: 表示該字段在數(shù)據(jù)庫(kù)中的實(shí)際類(lèi)型.通常 ORM 框架可以根據(jù)屬性類(lèi)型自動(dòng)判斷數(shù)據(jù)庫(kù)中字段的類(lèi)型,但是對(duì)于Date類(lèi)型仍無(wú)法確定數(shù)據(jù)庫(kù)中字段類(lèi)型究竟是DATE,TIME還是TIMESTAMP.此外,String的默認(rèn)映射類(lèi)型為VARCHAR, 如果要將 String 類(lèi)型映射到特定數(shù)據(jù)庫(kù)的 BLOB 或TEXT 字段類(lèi)型.
@Column標(biāo)注也可置于屬性的getter方法之前
@Transient
表示該屬性并非一個(gè)到數(shù)據(jù)庫(kù)表的字段的映射,ORM框架將忽略該屬性.
如果一個(gè)屬性并非數(shù)據(jù)庫(kù)表的字段映射,就務(wù)必將其標(biāo)示為@Transient,否則,ORM框架默認(rèn)其注解為@Basic
@Temporal
在核心的 Java API 中并沒(méi)有定義 Date 類(lèi)型的精度(temporal precision).? 而在數(shù)據(jù)庫(kù)中,表示 Date 類(lèi)型的數(shù)據(jù)有 DATE, TIME, 和 TIMESTAMP 三種精度(即單純的日期,時(shí)間,或者兩者 兼?zhèn)?. 在進(jìn)行屬性映射時(shí)可使用@Temporal注解來(lái)調(diào)整精度.
?
?
與50位技術(shù)專(zhuān)家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖
總結(jié)
- 上一篇: JPA入门简介与搭建HelloWorld
- 下一篇: Eclipse中Junit测试中@Bef