我有一个应用程序,我想在 PostgreSQL 和 SQL Server 上运行。我想使用 java.util.UUID 作为 ID。
我已将 SQL Server 中的列定义为
id UNIQUEIDENTIFIER ROWGUIDCOL NOT NULL UNIQUE
Run Code Online (Sandbox Code Playgroud)
我已将 PostgreSQL 中的列定义为
id UUID NOT NULL
Run Code Online (Sandbox Code Playgroud)
这些列在我的 JPA 实体中定义为
@Id
@Column(name = "id")
public UUID getId() {
return id;
}
Run Code Online (Sandbox Code Playgroud)
这适用于 PostgreSQL,因为它将 UUID 传递给 PostgreSQL JDBC 驱动程序。这种方式适用于 SQL Server,因为 Hibernate 在将 UUID 发送到 SQL Server 之前将其转换为其二进制形式。不幸的是,二进制格式略有不同,导致 GUID 的字符串表示(例如,使用 SSMS 查看它们时)不同,这至少是令人困惑的。
这可以在 SQL Server 中通过将列的类型更改为 uuid-char 来解决
@Id
@Type(type = "uuid-char")
@Column(name = "id")
public UUID getId() {
return …Run Code Online (Sandbox Code Playgroud)