Java Hibernate 和 SQL Server 中 UUID 的不同表示形式

2022-09-02 02:58:15

我正在尝试使用Hibernate将POJO中的列映射到SQL Server表列。UUID

注释按如下方式应用:

@Id
@GeneratedValue
@Column(name = "Id", columnDefinition = "uniqueidentifier") 
public UUID getId(){ ... }

但是,Java Hibernate映射和SQL服务器之间似乎存在一些字节序问题。

例如,在我的Java应用程序中,我的ID表示为:

4375CF8E-DEF5-43F6-92F3-074D34A4CE35
ADE3DAF8-A62B-4CE2-9D8C-B4E4A54E3DA1

而在 SQL Server 中,这些表示为:

8ECF7543-F5DE-F643-92F3-074D34A4CE35
F8DAE3AD-2BA6-E24C-9D8C-B4E4A54E3DA1

有没有办法在双方都有相同的代表性?

请注意,仅用于在 SQL 服务器中具有类型化的 ID,而不是类型 ;从注释中删除时也存在相同的问题(可以通过将问题转换为 )uniqueidentifieruniqueidentifierbinaryuniqueidentifierbinaryuniqueidentifier


答案 1

除了 之外,您还需要指定 ,另请参阅 在 JPA/休眠中映射 UUID 的问题@Type(type = "uuid-char")@Column(name="...", columnDefinition = "uniqueidentifier")

或者,您可以在Java中使用一个字段作为id,并且仍然保留在SQL Server中。Stringuniqueidentifier


答案 2

微软数据库使用 GUID。这是微软对UUID标准的实现。

话虽如此,您应该使用guid生成器。

@Id
@GenericGenerator(name = "generator", strategy = "guid", parameters = {})
@GeneratedValue(generator = "generator")
public String getId() {
    return id;
}

guid在 MS SQL Server 和 MySQL 上使用数据库生成的 GUID 字符串。

另外,您是否设置了 SQLServer2012Dialect?这也可能解决一些未来的问题。


推荐