將一個 POJO 類注解成一個實體 bean ( 持久化 POJO 類 )
@Table
為實體 bean 映射指定具體的表,如果該注解沒有被聲明,系統將使用默認值 ( 即實體 bean 不帶包名的短類名 )
@Id
將實體bean中的某個屬性定義為標識符 ( identifier )
@GeneratedValue
該注解可以定義該標識符的生成策略 ( 默認是 AUTO 策略 ) :
AUTO — 可以是 IDENTITY,或 SEQUENCE 或 TABLE 類型,這取決于不同的底層數據庫。
TABLE — 使用表保存id值
IDENTITY — 自然遞增
SEQUENCE — 序列
@Transient
被注解成 @Transient 的 getter 方法或屬性,將不會被持久化,hibernate 會忽略這些字段和屬性。
@Basic
所有沒有定義注解的屬性,等價于在其上面添加了 @Basic 注解.。通過 @Basic注解可以聲明屬性的獲取策略 ( fetch strategy )
@Temporal
在核心的 Java API 中并沒有定義時間精度 ( temporal precision )。因此處理時間類型數據時,你還需要定義將其存儲在數據庫中所預期的精度。
在數據庫中,表示時間類型的數據有 DATE,TIME,和 TIMESTAMP 三種精度 ( 即單純的日期,時間,或者兩者兼備 )。 可使用 @Temporal 注解來調整精度。
@Column
將實體 bean 中的屬性映射到表中的列。
@Column(
name = "columnName"; (1)
boolean unique() default false; (2)
boolean nullable() default true; (3)
boolean insertable() default true; (4)
boolean updatable() default true; (5)
String columnDefinition() default ""; (6)
String table() default ""; (7)
int length() default 255; (8)
int precision() default 0; (9)
int scale() default 0; (10)
(1) name 可選,列名(默認值是屬性名)
(2) unique 可選,是否在該列上設置唯一約束(默認值false)
(3) nullable 可選,是否設置該列的值可以為空(默認值true)
(4) insertable 可選,該列是否作為生成的insert語句中的一個列(默認值true)
(5) updatable 可選,該列是否作為生成的update語句中的一個列(默認值true)
(6) columnDefinition 可選,為這個特定列覆蓋SQL DDL片段 (這可能導致無法在不同數據庫間移植)
(7) table 可選,定義對應的表(默認為主表)
(8) length 可選,列長度(默認值255)
(9) precision 可選,列十進制精度(decimal precision)(默認值0)
(10) scale 可選,如果列十進制數值范圍(decimal scale)可用,在此設置(默認值0)
環境 : JDK 1.6,eclipse 3.6,maven 3.0.4,hibernate 3.3.2,junit 4.7,mysql 5.1
注 : 此處配置 pom.xml 是使用 maven 來管理 jar 包,如果你沒有使用 maven,則需手動導入相關 jar 包。
注 : 注解可以是在屬性或 getter 方法上進行聲明,但不建議混合使用這兩種聲明方式,相反,應該盡量避免。另外,由 static 修飾的屬性不會被持久化到數據庫。
在 Junit 測試類中執行建表方法 createTable,后臺打印輸出的 SQL 語句 :
數據庫中生成的表結構 :

在 Junit 測試類中執行插入數據的方法 insert,后臺打印輸出的 SQL 語句 :
數據庫中的數據 :

源碼下載 : hibernate annotation 之 注解聲明.rar
[ 解壓密碼 : http://www.tkk7.com/fancydeepin ]