在spring项目中使用UUID与@Id注释



我是Spring/Springboot的新手,在教程中看到了关于用于表示数据库对象的模型类的不同方法。我只是想知道什么时候使用哪个合适?

方法1:

为用户对象建模的基本类

public class User {
private final UUID id;
// other fields
public User(UUID id, <other fields>) {
this.id = id;
// set other fields
}

在存储库层,我们可能有一个类似的DAO

@Repository
public interface UserDao {
public int createUser(UUID id, <other fields>);
// other CRUD operations    
}

当用户没有输入有效的UUID(或不存在(时,默认方法可以通过调用UUID.randomUUID()来插入它

方法2:

我们没有使用UUID作为唯一标识符,而是使用Hibernate/JPA之类的东西,在模型包中的User类上使用@Entity注释,并使用@Id 注释PK字段

@Entity
public class User {
@Id
private final long id;
// other fields
}

@Id注释是Hibernate中最常用的方法。这将把JavaString/BigDecimal/long属性映射到一个标识符。使用它,您可以使用指定四种生成策略——AUTO、IDENTITY、SEQUENCE和TABLE。

UUID是在您希望主键全局唯一时使用的。我可以想出几个场景,你可能想要这个-

  • 您在多个数据库中有数据,并且您的密钥需要在不同的数据库中是唯一的
  • 甚至在将记录保存在数据库中用于特定业务目的之前,您就需要生成的id值

但缺点是,UUID很长,在存储空间方面可能会花费更多。

最新更新