Java 使用Hibernate/JPA将UUID作为二进制存储在Mysql数据库中,以提高性能
现在,我们使用JPA注释将id定义为字符串类型: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转换器将字符串转
@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代码>
@PrePersist
(在任何数据库持久化之前设置的自动属性),而不是refcator代码,例如->@PrePersist protected void onCreate(){您的uuid生成逻辑…}
现在您可以将其添加到实体类中,而无需重构其他代码