// Auto generation
public abstract class BaseEntity implements Serializable {
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2")
@Column(name = "id", unique = true)
private UUID id;
}
// Custom assignment
public abstract class BaseEntity implements Serializable {
@Id
@Column(name = "id", unique = true)
private UUID id = UUID.randomUUID();
}
public User extends BaseEntity{
@OneToOne
private Address address;
//... Getter/Setter
}
public Address extends BaseEntity{}
我的问题是,如果我想使用UUID作为主键,我们是否需要使用生成器来分配UUID以及两种方法之间有什么区别?
对于自动生成,UUID仅在保存到数据库后生成。以下
User user = new User();
User newUser = userRepository.save(user);
newUser.setAddress(new Address());
User newUserWithAddress = userRepository.save(user);
return newUserWithAddress;
对于自定义分配,UUID可以在保存到数据库之前生成。代码更清晰。 如果我使用自定义作业,是否存在任何潜在问题?
User user = new User();
userRepository.save(user);
user.setAddress(new Address());
userRepository.save(user);
return user;
答案 0 :(得分:2)
在构造函数中分配随机标识符有缺点: