在对象创建时将UUID生成为ID,而不是使用@GeneratedValue

来源:爱站网时间:2021-09-16编辑:网友分享
我必须解决以下问题:到目前为止,我已经创建了看起来或多或少像这样的实体:公共类ExampleEntity {@Id @GeneratedValue(generator =“ UUID”)private UUID id; //其他...

问题描述


我必须注意以下问题:到目前为止,我已经创建了看起来或多或少像这样的实体:

public class ExampleEntity {
  @Id
  @GeneratedValue(generator = "UUID")
  private UUID id;

  // Other properties...

  @Override
  public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    ExampleEntity that = (ExampleEntity) o;
    return id.equals(that.id);
  }
}

这很好,直到最近我不得不比较对象才能将它们持久化到数据库中。我意识到注释@GeneratedValue(generator = "UUID")会在对象创建时生成UUID(duhh ...),并且如果对象未在数据库中表示,则所有ID都是null

我现在正在寻找以UUID作为ID初始化实体的最佳方法。这足够还是有更好的方法呢?

public class ExampleEntity {
  @Id
  private UUID id = UUID.randomUUID();

  // Same as above...
}

思路:


不是,因为不能保证,UUID.randomUUID()会生成唯一值。您必须调用数据库(有可能您必须多次执行此操作)以查看是否没有冲突。

我不确定,为什么数据库中的@ID生成错误?如果要获取新创建的对象的ID,只需调用:

exampleEntityRepository.save(new ExampleEntity()).getId();

上一篇:毕达哥拉斯定理的编码

下一篇:如何将ipv6字符串地址转换为16个字节?

您可能感兴趣的文章

相关阅读

热门软件源码

最新软件源码下载