Java UUID在H2和带有Spring JPA的Sql Server中持久化



假设我需要在数据库中保留一些数据,其中一列是request_id,它是我的应用程序创建的随机uuid。

首先,我在为H2和SQL Server数据库创建DDL语句时应该使用什么类型?我在本地使用H2,在生产中使用sql server。

CREATE TABLE REQUESTS_DETAILS
(
REQUEST_ID --what should be the type for H2 and SQLServer? 
NAME NVARCHAR(20)   NOT NULL,
);

其次,当使用Spring JPA实体时,对应的java类型是什么?

最近几天我经历了这一切。看看这里和这里。

这个uuid会成为你的主键吗?

对于数据类型,这取决于业务对uuid数据类型的需求。我建议你至少读一次。

总结一下,根据我到目前为止的理解,将数据类型用作uuid的String,并使用uuid4。如果您计划使用Spring JPA/Hibernate,请选择主键/外键的Long类型。通过这种方式,您可以轻松地维护密钥并对其进行索引,而不是对字符串类型的uuid进行索引。

如果您正在寻找一个像uuid这样的唯一标识符(就像我的情况一样(,请在String类型的实体中寻找一个单独的字段,生成uuid4数据类型并将其视为String。建议使用字符串,因为您总是可以将它们从一个数据库移植到另一个数据库,而不会有任何麻烦。始终要考虑在不同数据库(MSSQL/Oracle/DB2/Postgres等(之间迁移数据的事实。

现在,回到使用UUID,你总是可以做:

@NotEmpty
@Column(name = "useruuid")
@GenericGenerator(name = "uuid", strategy = "uuid4")
private String useruuid;

要生成UUID,您可以简单地使用:

UUID.randomUUID() 

UUID.randomUUID().toString();

看看我最近发布的示例项目。

最新更新