【问题标题】:Store UUID as binary in Mysql database with Hibernate/JPA for improving the performance使用 Hibernate/JPA 将 UUID 以二进制形式存储在 Mysql 数据库中以提高性能
【发布时间】:2017-09-22 05:09:36
【问题描述】:

现在,我们将 id 定义为带有 JPA 注释的 String 类型:

@Id
private String id;

现在我们想在 Mysql 中将 UUID 保存为二进制文件,我知道 JPA 有一种方法来实现它,如下所示:

@Id
@Column(columnDefinition = "BINARY(16)")
private UUID id;

但是将String修改为java.util.UUID类型是很大的努力,因为我需要修改大量的代码(大量的测试用例,其他调用等等,反正我们不能这样做)。

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

那么,请谁能提供一些可能的方法来将 UUID 保存为二进制而不更改原始字符串类型。

【问题讨论】:

    标签: java mysql hibernate jpa uuid


    【解决方案1】:

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

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

      你的身份证会喜欢:

      @GeneratedValue(generator = "uuid2") @GenericGenerator(name = "uuid2", strategy = "uuid2") @Column(columnDefinition = "BINARY(16)") @Id private UUID id;

    【讨论】:

    • 我想将字段定义为String,但是将其存储为二进制,因为我不想重构很多代码
    • @Tony 而不是 refcator 你的代码,你可以在你的实体中添加@PrePersist (在任何数据库持久性之前设置自动属性),例如-> @PrePersist protected void onCreate() { your uuid generation logic... } 现在你可以在你的实体中添加它类,你不需要照顾重构另一个代码。这是文档docs.jboss.org/hibernate/orm/4.0/hem/en-US/html/listeners.html
    猜你喜欢
    • 2011-10-01
    • 2014-07-23
    • 1970-01-01
    • 2016-11-03
    • 2017-12-25
    • 2020-10-25
    • 1970-01-01
    • 1970-01-01
    • 2012-01-07
    相关资源
    最近更新 更多