1. 基本屬性映射
通過 @Basic 可以聲明屬性的存取策略:
@Basic(fetch=FetchType.EAGER)?? 即時獲取(默認的存取策略)
@Basic(fetch=FetchType.LAZY)??? 延遲獲取
通過 @Temporal 定義映射到數據庫的時間精度:
@Temporal(TemporalType=DATE)?????? 日期
@Temporal(TemporalType=TIME)?????? 時間
@Temporal(TemporalType=TIMESTAMP)? 兩者兼具
使用 @Lob 映射Blob或Clob類型:根據屬性類型決定
java.sql.CLOB, Character[], char[], String 將映射為 Clob
java.sql.BLOB, Byte[], byte[], serializable 將映射為 Blob
2. 列屬性映射
使用 @Column 映射到列
@Column(
name="columnName";??? // 可選,列名(默認是屬性名)
boolean unique() default false;? // 可選,是否在該列上設置唯一約束(默認 false)
boolean nullable() default true; // 可選,是否可以為空
boolean insertable() default true; // 可選,該列是否作為生成insert語句中的一列
boolean updatable() default true;? // 可選,該列是否作為生成update語句中的一列
String columnDefinition() default ""; // 可選,為這個特定列覆蓋 SQL DDL 片段(可能導致無法在不同數據庫間移植)
String table() default "";? // 可選,定義對應的表,默認為主表
int length() default 255;?? // 可選,列長度
int precision() default 0; // 可選,列十進制精度(decimal precision)
int scale() default 0; // 可選, 列十進制數范圍(decimal scale)
public?class?Person?{
????@Column(name?=?"PERSONNAME",?unique?=?true,?nullable?=?false,?updatable?=?true)
????private?String?name;
????@Column(name?=?"PHOTO",?columnDefinition?=?"BLOB?NOT?NULL",?secondaryTable="PER_PHOTO")
????private?byte[]?picture;
}