在对象创建时将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();
上一篇:毕达哥拉斯定理的编码