
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
private UUID id;
// 其他字段...
}⚠️ 注意事项:
-
@UuidGenerator默认采用 RFC 4122 兼容的随机 UUID(UUIDGenerationStrategy.RANDOM),等效于旧版UUIDGenerator的默认行为; - 如需指定生成策略(例如基于时间戳的
TIME或数据库委托的POSTGRES),可通过style属性配置:@UuidGenerator(style = UuidGenerator.Style.TIME) private UUID id;
- 不再需要
@GeneratedValue(generator = "...")+@GenericGenerator的冗余组合; - 确保使用的是 Hibernate ORM 6.2+ 和 Jakarta EE 命名空间(如
jakarta.persistence.*),避免混用javax.*包导致编译或运行时异常; - 若项目仍依赖旧版
@GenericGenerator写法,升级后需全局替换,否则可能触发警告甚至未来版本移除导致构建失败。
? 总结:@UuidGenerator 不仅简化了配置、提升了可读性,还内建了对不同数据库 UUID 类型(如 PostgreSQL UUID、MySQL CHAR(36))的适配逻辑。迁移成本极低,是 Hibernate 6+ 中 UUID 主键生成的标准实践。

















