- @Entity ——将一個類聲明為一個實體bean(即一個持久化POJO類)
- @Id ——注解聲明了該實體bean的辨別屬性(對應表中的主鍵)。
- @Table ——注解聲明了該實體bean映射指定的表(table),目錄(catalog)和schema的名字。
-
@Column ——注解聲明了屬性到列的映射。該注解有如下的屬性:
name 可選,列名(預設值是屬性名)
unique 可選,是否在該列上設定唯一限制(預設值false)
nullable 可選,是否設定該列的值可以為空(預設值false)
insertable 可選,該列是否作為生成的insert語句中的一個列(預設值true)
updatable 可選,該列是否作為生成的update語句中的一個列(預設值true)
columnDefinition 可選,為這個特定列覆寫sql ddl片段(這可能導緻無法在不同資料庫間移植)
table 可選,定義對應的表(預設為主表)
length 可選,列長度(預設值255)
precision 可選,列十進制精度(decimal precision)(預設值 0
scale 可選,如果列十進制數值範圍(decimal scale)可用,在此設定(預設值0)。
-
@GeneratedValue ——注解聲明了主鍵的生成政策。該注解有如下屬性
strategy 指定生成的政策(JPA定義的),這是一個GenerationType。預設是GenerationType. AUTO
GenerationType.AUTO 主鍵由程式控制
GenerationType.TABLE 使用一個特定的資料庫表格來儲存主鍵
GenerationType.IDENTITY 主鍵由資料庫自動生成(主要是自動增長類型)
GenerationType.SEQUENCE 根據底層資料庫的序列來生成主鍵,條件是資料庫支援序列。這個值要與generator一起使用,generator 指定生成主鍵使用的生成器(可能是orcale中的序列)。
generator 指定生成主鍵使用的生成器
例如:
@Id @GeneratedValue(generator = “system-uuid”)
@GenericGenerator(name = “system-uuid”, strategy = “uuid”)
@Column(name = “ID”, unique = true, nullable = false)
public StringgetId() {
return this.id;
}
其中generator = “system-uuid”,生成器的名字要與GenericGenerator裡name名字一緻。
GenericGenerator
聲明了一個hibernate的主鍵生成政策。支援十三種政策。該注解有如下屬性:
name 指定生成器名稱。
strategy 指定具體生成器的類名(指定生成政策)。
parameters 得到strategy指定的具體生成器所用到的參數。
其十三種政策(strategy屬性的值)如下:
● native
對于orcale采用Sequence方式,對于MySQL和SQL Server采用identity(處境主鍵生成機制),native就是将主鍵的生成工作将由資料庫完成,hibernate不管(很常用)
例:@GeneratedValue(generator = “paymentableGenerator”)
@GenericGenerator(name = “paymentableGenerator”, strategy = “native”)
● uuid
采用128位的uuid算法生成主鍵,uuid被編碼為一個32位16進制數字的字元串。占用空間大(字元串類型)。
例:@GeneratedValue(generator = “paymentableGenerator”)
@GenericGenerator(name = “paymentableGenerator”, strategy = “uuid”)
● hilo
要在資料庫中建立一張額外的表,預設表名為hibernate_unque_key,預設字段為integer類型,名稱是next_hi(比較少用)。
例:@GeneratedValue(generator = “paymentableGenerator”)
@GenericGenerator(name = “paymentableGenerator”, strategy = “hilo”)
● assigned
在插入資料的時候主鍵由程式處理(很常用),這是元素沒有指定時的預設生成政策。等同于JPA中的AUTO。可用于設定id為字元串類型,可用于手工指派。
例如:@id
@GeneratedValue(generator = “sid”)
@GenericGenerator(name = “sid”, strategy = “assigned”)
@Column(length=8)
private String id;
例:@GeneratedValue(generator = “paymentableGenerator”)
@GenericGenerator(name = “paymentableGenerator”, strategy = “assigned”)
● identity
使用SQL Server和MySQL的自增字段,這個方法不能放到Oracle中,Oracle不支援自增字段,要設定sequence(MySQL和SQL Server中很常用)。等同于JPA中的IDENTITY
例:@GeneratedValue(generator = “paymentableGenerator”)
@GenericGenerator(name = “paymentableGenerator”, strategy = “identity”)
● select
使用觸發器生成主鍵(主要用于早期的資料庫主鍵生成機制,少用)
例:@GeneratedValue(generator = “paymentableGenerator”)
@GenericGenerator(name = “paymentableGenerator”, strategy = “select”)
● sequence
調用謹慎資料庫的序列來生成主鍵,要設定序列名,不然hibernate無法找到。
例:@GeneratedValue(generator = “paymentableGenerator”)
@GenericGenerator(name = “paymentableGenerator”, strategy = “sequence”, parameters = { @Parameter(name = “sequence”, value = “seq_payablemoney”) })
● seqhilo
通過hilo算法實作,但是主鍵曆史儲存在Sequence中,适用于支援Sequence的資料庫,如Orcale(比較少用)。
例:@GeneratedValue(generator = “paymentableGenerator”)
@GenericGenerator(name = “paymentableGenerator”, strategy = “seqhilo”, parameters = { @Parameter(name = “max_lo”, value = “5”) })
● increnment
插入資料的時候hibernate會給主鍵添加一個自增的主鍵,但是一個hibernate執行個體就維護一個計數器,是以在多個執行個體運作的時候不能使用這個方法。
例:@GeneratedValue(generator = “paymentableGenerator”)
@GenericGenerator(name = “paymentableGenerator”, strategy = “increnment”)
● foreign
使用另一個相關的對象的主鍵。通常和@OneToOne聯合起來使用。
例:@Id
@GeneratedValue(generator = “idGenerator”)
@GenericGenerator(name = “idGenerator”, strategy = “foreign”, parameters = { @Parameter(name = “property”, value = “info”) })
Integer id;
@OneToOne
EmployeeInfo info;
● guid
采用資料庫底層的guid算法機制,對應MySQL的uuid()函數,SQL Server的newid()函數,ORCALE的rawtohex(sys_guid())函數等。
例:@GeneratedValue(generator = “paymentableGenerator”)
@GenericGenerator(name = “paymentableGenerator”, strategy = “guid”)
● uuid.hex
參見uuid,建議用uuid替換。
● sequence-identity
sequence政策的擴充,采用立即檢索政策來擷取sequence值,需要JDBC3.0和JDK4以上(含1.4)版本。
例:@GeneratedValue(generator = “paymentableGenerator”)
@GenericGenerator(name = “paymentableGenerator”, strategy = “sequence-identity”, parameters = { @Parameter(name = “sequence”, value = “seq_payablemoney”) })
-
@Transient
聲明了非持久化屬性,即資料庫中沒有相應的映射字段,是一個普通屬性。
-
@Temporal 聲明了日期類型。 TemporalType.DATE 日期,例:2011-04-12
TemporalType.TIME 時間,例:22:50:30 TemporalType.TIMESTAMP
日期和時間,例:2011-04-12 22:51:30
-
@Version 聲明了對樂觀鎖定的支援 例:@Version
@Column(name=”OPTLOCK”)
public Integer getVersion() { … } 上面這個例子中,version屬性将映射到 OPTLOCK列,entity manager使用該字段來檢測更新沖突(防止更新丢失,請參考last-commit-wins政策)。
根據EJB3規範,version列可以是numeric類型(推薦方式)也可以是timestamp類型。Hibernate支援任何自定義類型,隻要該類型實作了UserVersionType。
-