首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2EE

Hibernate 註解 ID 生成策略完整指南 (@GeneratedValue)

     編輯:J2EE

前言

@GeneratedValue 定義主鍵值產生方式,搭配 strategy 指定標準策略,或配合 @GenericGenerator 使用 Hibernate 原生生成器。

JPA 標準策略 (GenerationType)

策略適用資料庫說明
AUTO通用由持久化提供者自動選擇 (通常為 IDENTITY 或 SEQUENCE)
IDENTITYMySQL, SQL Server, PostgreSQL, DB2資料庫自增欄位,插入後取回生成值
SEQUENCEOracle, PostgreSQL, DB2, H2使用資料庫 Sequence 物件
TABLE通用使用模擬序列表 (hibernate_sequences) 產生 ID,跨資料庫可攜

範例:各策略註解寫法

1. AUTO (預設)

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

2. IDENTITY (MySQL 常用)

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

3. SEQUENCE (Oracle 常用)

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_gen")
@SequenceGenerator(name = "seq_gen", sequenceName = "SEQ_USER", allocationSize = 1)
private Long id;

4. TABLE (跨資料庫)

@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "tbl_gen")
@TableGenerator(name = "tbl_gen", table = "ID_GEN", pkColumnName = "GEN_KEY", valueColumnName = "GEN_VALUE", pkColumnValue = "USER_ID")
private Long id;

Hibernate 原生生成器 (@GenericGenerator)

若需使用 UUID、GUID、HiLo 等非標準策略,需配合 @GenericGenerator:

@Id
@GeneratedValue(generator = "uuid_gen")
@GenericGenerator(name = "uuid_gen", strategy = "uuid2") // 或 uuid.hex, guid, assigned 等
private String id;

常用 Hibernate 內建生成器策略名稱

  • uuid2 (標準 UUID, IETF RFC 4122)
  • uuid.hex (16進位字串,已棄用建議用 uuid2)
  • guid (資料庫特定 GUID,如 SQL Server NEWID)
  • assigned (應用程式手動指派)
  • identity, sequence, seqhilo, hilo, increment
  • foreign (一對一共用主鍵)
  • sequence-identity (PostgreSQL 專用)

共享生成器

多實體共用同一生成器實例 (如共用 Sequence):

// 實體 A
@GeneratedValue(generator = "shared_seq")
@SequenceGenerator(name = "shared_seq", sequenceName = "GLOBAL_SEQ")

// 實體 B
@GeneratedValue(generator = "shared_seq")
@SequenceGenerator(name = "shared_seq", sequenceName = "GLOBAL_SEQ")

注意事項

  • IDENTITY 策略下 persist() 會立即執行 INSERT,無法批次插入 (batch insert 失效)。
  • SEQUENCE 建議設定 allocationSize (預設 50) 減少資料庫往返,但需與資料庫 Sequence INCREMENT BY 一致。
  • 複合主鍵 (@IdClass/@EmbeddedId) 通常不適用自動生成策略。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved