Id生成策略:
@GeneratedValue,JPA通用策略生成器 。
JPA提供的四種標准用法為TABLE,SEQUENCE,IDENTITY,AUTO.
TABLE:使用一個特定的數據庫表格來保存主鍵。
SEQUENCE:根據底層數據庫的序列來生成主鍵,條件是數據庫支持序列。
@Id @GeneratedValue(strategy = GenerationType.SEQUENCE,generator="payablemoney_seq") @SequenceGenerator(name="payablemoney_seq", sequenceName="seq_payment")
IDENTITY:主鍵由數據庫自動生成(主要是自動增長型)
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
AUTO:主鍵由程序控制。
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@GenericGenerator
hibernate主鍵策略生成器
@GenericGenerator注解配合@
GeneratedValue一起使用,@GeneratedValue注解中的"generator"屬性要與@GenericGenerator注解中name屬性一致,strategy屬性表示hibernate的主鍵生成策略
@Id @GeneratedValue(generator="increment") @GenericGenerator(name="increment", strategy = "increment")
native: 對於 oracle 采用 Sequence 方式,對於MySQL 和 SQL Server 采用identity(自增主鍵生成機制),native就是將主鍵的生成工作交由數據庫完成,hibernate不管(很常用)。
@GeneratedValue(generator = "xxx")
@GenericGenerator(name = "xxx", strategy = "native")
uuid: 采用128位的uuid算法生成主鍵,uuid被編碼為一個32位16進制數字的字符串。占用空間大(字符串類型)。
@GeneratedValue(generator = "xxx")
@GenericGenerator(name = "xxx", strategy = "uuid")
hilo: 使用hilo生成策略,要在數據庫中建立一張額外的表,默認表名為hibernate_unique_key,默認字段為integer類型,名稱是next_hi(比較少用)。
@GeneratedValue(generator = "xxx")
@GenericGenerator(name = "xxx", strategy = "hilo")
assigned: 在插入數據的時候主鍵由程序處理(很常用),這是 <generator>元素沒有指定時的默認生成策略。等同於JPA中的AUTO。
@GeneratedValue(generator = "xxx")
@GenericGenerator(name = "xxx", strategy = "assigned ")
identity: 使用SQL Server 和 MySQL 的自增字段,這個方法不能放到 Oracle 中,Oracle 不支持自增字段,要設定sequence(MySQL 和 SQL Server 中很常用); 等同於JPA中的INDENTITY。
@GeneratedValue(generator = "xxx")
@GenericGenerator(name = "xxx", strategy = "identity ")
sequence: 調用底層數據庫的序列來生成主鍵,要設定序列名,不然hibernate無法找到。
@GeneratedValue(generator = "xxx") @GenericGenerator(name = "xxx", strategy = "sequence", parameters = { @Parameter(name = "sequence", value = "底層數據庫sequenceName") }
increment: 插入數據的時候hibernate會給主鍵添加一個自增的主鍵,但是一個hibernate實例就維護一個計數器,所以在多個實例運行的時候不能使用這個方法。
@GeneratedValue(generator = "xxx")
@GenericGenerator(name = "xxx", strategy = "increment")
guid: 采用數據庫底層的guid算法機制,對應MYSQL的uuid()函數,SQL Server的newid()函數,ORACLE的rawtohex(sys_guid())函數等。
@GeneratedValue(generator = "xxx")
@GenericGenerator(name = "xxx", strategy = "guid")
uuid.hex: 看uuid,建議用uuid替換。
@GeneratedValue(generator = "xxx") @GenericGenerator(name = "xxx", strategy = "uuid.hex")