Java 使用Hibernate/JPA将UUID作为二进制存储在Mysql数据库中,以提高性能

Java 使用Hibernate/JPA将UUID作为二进制存储在Mysql数据库中,以提高性能,java,mysql,hibernate,jpa,uuid,Java,Mysql,Hibernate,Jpa,Uuid,现在,我们使用JPA注释将id定义为字符串类型: @Id private String id; 现在我们想在Mysql中将UUID保存为二进制,我知道JPA有一种方法可以实现它,如下所示: @Id @Column(columnDefinition = "BINARY(16)") private UUID id; 但将字符串修改为java.util.UUID类型需要很大的努力,因为我需要修改大量的代码(大量的测试用例、其他调用等等,无论如何我们不能这样做) 然后我尝试使用JPA转换器将字符串转

现在,我们使用JPA注释将id定义为字符串类型:

@Id
private String id;
现在我们想在Mysql中将UUID保存为二进制,我知道JPA有一种方法可以实现它,如下所示:

@Id
@Column(columnDefinition = "BINARY(16)")
private UUID id;
但将字符串修改为java.util.UUID类型需要很大的努力,因为我需要修改大量的代码(大量的测试用例、其他调用等等,无论如何我们不能这样做)

然后我尝试使用JPA转换器将字符串转换为字节并保存它,但我发现JPA不允许在ID字段上定义转换器


因此,请提供一些可能的方法将UUID保存为二进制,而无需更改原始字符串类型。

您可以使用
uuid2
,它提供了更广泛的类型选择范围:

  • java.lang.UUID
  • 16字节数组
  • 十六进制字符串值

    您的身份证如下:

    @GeneratedValue(generator=“uuid2”)
    @GenericGenerator(name=“uuid2”,strategy=“uuid2”)
    @列(columnDefinition=“二进制(16)”)
    @身份证
    私有UUID


我想将字段定义为字符串,但将其存储为二进制文件,因为我不想重构很多数据code@Tony您只需在实体中添加
@PrePersist
(在任何数据库持久化之前设置的自动属性),而不是refcator代码,例如->
@PrePersist protected void onCreate(){您的uuid生成逻辑…}
现在您可以将其添加到实体类中,而无需重构其他代码