如何在 spring 引导时使用 Hibernate 生成自动 UUID
How to Generate an auto UUID using Hibernate on spring boot
我想要实现的是生成一个在数据库插入期间自动分配的 UUID。类似于名为"id" 的主键列生成一个id 值。
模型值如下所示:
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(nullable = false)
private Long id;
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "uuid2")
@Column(name = "uuid", columnDefinition = "BINARY(16)")
private UUID uuid;
但是当数据库插入完成时。 "uuid" 是空的。
非常感谢您的帮助。如果我问的是一个明显愚蠢的问题,我很抱歉。
你能试试吗?
@Id
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator")
@Column(name = "id", columnDefinition = "VARCHAR(255)")
private UUID id;
你可以使用@PrePersist 之类的事件来填充 UUID 字段
https://docs.jboss.org/hibernate/orm/4.0/hem/en-US/html/listeners.html
但是为什么在创建对象时不分配 uuid uuid = UUID.randomUUID() ?
以下对我有用:
@Id
@GeneratedValue(generator = "UUID")
@GenericGenerator(
name = "UUID",
strategy = "org.hibernate.id.UUIDGenerator"
)
@Column(name = "id", updatable = false, nullable = false)
private UUID id;
框架有很多变化,在 Spring Boot 2.2.5 和 MySQL v5.7 中进行了测试(应该适用于所有 2.0 版本,但需要检查)UUID 可以像下面这样自动生成
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="id", insertable = false, updatable = false, nullable = false)
private UUID id;
这将以二进制格式以紧凑的方式存储它(有利于存储)。如果出于某种原因需要将 UUID 存储在 Varchar 字段中作为人类可读的(破折号分隔值),可以按以下方式完成
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Type(type="uuid-char")
@Column(name="id", columnDefinition = "VARCHAR(255)", insertable = false, updatable = false, nullable = false)
private String id;
默认情况下,Hibernate 将 UUID 映射为二进制格式,因此要更改格式,我们需要使用类型注释提供提示。
我想要实现的是生成一个在数据库插入期间自动分配的 UUID。类似于名为"id" 的主键列生成一个id 值。
模型值如下所示:
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(nullable = false)
private Long id;
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "uuid2")
@Column(name = "uuid", columnDefinition = "BINARY(16)")
private UUID uuid;
但是当数据库插入完成时。 "uuid" 是空的。
非常感谢您的帮助。如果我问的是一个明显愚蠢的问题,我很抱歉。
你能试试吗?
@Id
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator")
@Column(name = "id", columnDefinition = "VARCHAR(255)")
private UUID id;
你可以使用@PrePersist 之类的事件来填充 UUID 字段 https://docs.jboss.org/hibernate/orm/4.0/hem/en-US/html/listeners.html
但是为什么在创建对象时不分配 uuid uuid = UUID.randomUUID() ?
以下对我有用:
@Id
@GeneratedValue(generator = "UUID")
@GenericGenerator(
name = "UUID",
strategy = "org.hibernate.id.UUIDGenerator"
)
@Column(name = "id", updatable = false, nullable = false)
private UUID id;
框架有很多变化,在 Spring Boot 2.2.5 和 MySQL v5.7 中进行了测试(应该适用于所有 2.0 版本,但需要检查)UUID 可以像下面这样自动生成
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="id", insertable = false, updatable = false, nullable = false)
private UUID id;
这将以二进制格式以紧凑的方式存储它(有利于存储)。如果出于某种原因需要将 UUID 存储在 Varchar 字段中作为人类可读的(破折号分隔值),可以按以下方式完成
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Type(type="uuid-char")
@Column(name="id", columnDefinition = "VARCHAR(255)", insertable = false, updatable = false, nullable = false)
private String id;
默认情况下,Hibernate 将 UUID 映射为二进制格式,因此要更改格式,我们需要使用类型注释提供提示。