通過annotation(注解)來映射hibernate實體的,基於annotation的hibernate主鍵標識為@Id, 其生成規則由@GeneratedValue設定的.這里的@id和@GeneratedValue都是JPA的標准用法。
JPA提供的四種標准用法為TABLE,SEQUENCE,IDENTITY,AUTO
具體說明如下:
IDENTITY:主鍵由數據庫自動生成(主要是自動增長型)
用法:
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long custId;
SEQUENCE:根據底層數據庫的序列來生成主鍵,條件是數據庫支持序列。
用法:
@Id @GeneratedValue(strategy = GenerationType.SEQUENCE,generator="payablemoney_seq") @SequenceGenerator(name="payablemoney_seq", sequenceName="seq_payment") private Long custId; //@SequenceGenerator源碼中的定義 @Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME) public @interface SequenceGenerator { //表示該表主鍵生成策略的名稱,它被引用在@GeneratedValue中設置的“generator”值中 String name(); //屬性表示生成策略用到的數據庫序列名稱。 String sequenceName() default ""; //表示主鍵初識值,默認為0 int initialValue() default 0; //表示每次主鍵值增加的大小,例如設置1,則表示每次插入新記錄后自動加1,默認為50 int allocationSize() default 50; }
AUTO:主鍵由程序控制
用法:
@Id @GeneratedValue(strategy = GenerationType.AUTO) private Long custId;
TABLE:使用一個特定的數據庫表格來保存主鍵
用法:
@Id @GeneratedValue(strategy = GenerationType.TABLE, generator="payablemoney_gen") @TableGenerator(name = "pk_gen", table="tb_generator", pkColumnName="gen_name", valueColumnName="gen_value", pkColumnValue="PAYABLEMOENY_PK", allocationSize=1 ) private Long custId;
//@TableGenerator的定義:
@Target({TYPE, METHOD, FIELD})
@Retention(RUNTIME)
public @interface TableGenerator {
//表示該表主鍵生成策略的名稱,它被引用在@GeneratedValue中設置的“generator”值中
String name();
//表示表生成策略所持久化的表名,例如,這里表使用的是數據庫中的“tb_generator”。
String table() default "";
//catalog和schema具體指定表所在的目錄名或是數據庫名
String catalog() default "";
String schema() default "";
//屬性的值表示在持久化表中,該主鍵生成策略所對應鍵值的名稱。例如在“tb_generator”中將“gen_name”作為主鍵的鍵值
String pkColumnName() default "";
//屬性的值表示在持久化表中,該主鍵當前所生成的值,它的值將會隨着每次創建累加。例如,在“tb_generator”中將“gen_value”作為主鍵的值
String valueColumnName() default "";
//屬性的值表示在持久化表中,該生成策略所對應的主鍵。例如在“tb_generator”表中,將“gen_name”的值為“CUSTOMER_PK”。
String pkColumnValue() default "";
//表示主鍵初識值,默認為0。
int initialValue() default 0;
//表示每次主鍵值增加的大小,例如設置成1,則表示每次創建新記錄后自動加1,默認為50。
int allocationSize() default 50;
UniqueConstraint[] uniqueConstraints() default {};
}
//這里應用表tb_generator,定義為 :
CREATE TABLE tb_generator (
id NUMBER NOT NULL,
gen_name VARCHAR2(255) NOT NULL,
gen_value NUMBER NOT NULL,
PRIMARY KEY(id)
)