
Hibernate 6.2 起废弃了 @GenericGenerator(strategy = "org.hibernate.id.UUIDGenerator") 的旧式配置,推荐使用更简洁、类型安全的 @UuidGenerator 注解替代,实现标准 UUID 主键自动生成。
hibernate 6.2 起废弃了 `@genericgenerator(strategy = "org.hibernate.id.uuidgenerator")` 的旧式配置,推荐使用更简洁、类型安全的 `@uuidgenerator` 注解替代,实现标准 uuid 主键自动生成。
在 Hibernate 6.x(尤其是 6.2 及以上版本)中,UUID 主键生成机制已完成重构:原先依赖 @GenericGenerator 配合字符串形式的 strategy 参数的方式已被标记为 deprecated,取而代之的是语义明确、编译期可校验的专用注解 @UuidGenerator。
✅ 正确用法(推荐,Hibernate 6.2+):
import org.hibernate.annotations.UuidGenerator;
import jakarta.persistence.Id;
import java.util.UUID;
@Entity
public class Product {
@Id
@UuidGenerator // 自动使用 RFC 4122 兼容的随机 UUID(即 UUID.randomUUID())
private UUID id;
// other fields...
}
⚠️ 注意事项:
-
@UuidGenerator默认采用random类型(等价于UUID.randomUUID()),无需额外配置; - 如需指定其他 UUID 生成策略(如
time-based或string-based),可通过style属性定制(需配合@GeneratedValue显式声明):@Id @GeneratedValue @UuidGenerator(style = "time") // 使用基于时间戳的 UUID(UUIDv1) private UUID id;
- 若仍需兼容旧版
@GenericGenerator风格(例如集成遗留代码或特殊 ID 生成器),可改用type()指向具体类(但不推荐):@GenericGenerator( name = "uuid-gen", type = org.hibernate.id.uuid.UuidGenerator.class // 注意:是 class 类型,非字符串 )并配合
@GeneratedValue(generator = "uuid-gen")—— 但此方式失去语义清晰性与维护性,应优先选用@UuidGenerator。
? 总结:迁移至 @UuidGenerator 不仅消除弃用警告,还提升代码可读性与类型安全性;它是 Hibernate 官方为 UUID 场景提供的首选、标准化方案。务必确保项目使用 Hibernate ORM 6.2+ 及对应 Jakarta EE(非 javax)依赖。










