javahibernate和sqlserver中UUID的不同表示

javahibernate和sqlserver中UUID的不同表示,java,sql-server,hibernate,Java,Sql Server,Hibernate,我正在尝试使用Hibernate将POJO中的UUID列映射到SQL Server表列 注释的应用如下所示: @Id @GeneratedValue @Column(name = "Id", columnDefinition = "uniqueidentifier") public UUID getId(){ ... } 然而,Java Hibernate映射和SQL server之间似乎存在一些持久性问题 例如,在我的Java应用程序中,我的ID表示为: 4375CF8E-DEF5-43F

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

注释的应用如下所示:

@Id
@GeneratedValue
@Column(name = "Id", columnDefinition = "uniqueidentifier") 
public UUID getId(){ ... }
然而,Java Hibernate映射和SQL server之间似乎存在一些持久性问题

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

4375CF8E-DEF5-43F6-92F3-074D34A4CE35
ADE3DAF8-A62B-4CE2-9D8C-B4E4A54E3DA1
8ECF7543-F5DE-F643-92F3-074D34A4CE35
F8DAE3AD-2BA6-E24C-9D8C-B4E4A54E3DA1
而在SQL Server中,它们表示为:

4375CF8E-DEF5-43F6-92F3-074D34A4CE35
ADE3DAF8-A62B-4CE2-9D8C-B4E4A54E3DA1
8ECF7543-F5DE-F643-92F3-074D34A4CE35
F8DAE3AD-2BA6-E24C-9D8C-B4E4A54E3DA1
有没有办法让双方都有相同的代表权


请注意,
uniqueidentifier
仅用于在SQL server中有一个
uniqueidentifier
类型id,而不是类型
binary
;从注释中删除
uniqueidentifier
时也存在相同的问题(通过将
binary
转换为
uniqueidentifier
可以观察到该问题)。

对于SQL Server,您应该为生成器使用guid策略:

@GeneratedValue(generator = "my-uid")
@GenericGenerator(name = "my-uid", strategy = "guid")
@Id
private UUID uuid;

Java在版本4中使用UUID生成器。您如何在此处看到:

4375CF8E-DEF5-43F6-92F3-074D34A4CE35


ADE3DAF8-A62B-4CE2-9D8C-B4E4A54E3DA1

除了
@Column(name=“…”,columnDefinition=“uniqueidentifier”)
之外,还需要指定
@Type(Type=“uuid char”)
,请参见


或者,您可以在Java中为id使用
字符串
字段,并在SQL Server中保留
唯一标识符

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

也就是说,您应该使用guid生成器

@Id
@GenericGenerator(name = "generator", strategy = "guid", parameters = {})
@GeneratedValue(generator = "generator")
public String getId() {
    return id;
}
guid
在MS SQL Server上使用数据库生成的guid字符串,并且 MySQL


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

与相关是与相关:最初我认为这是不正确的,但已经确认它是有效的,如果使用@Column(columnDefinition=“uniqueidentifier”)@Type(Type=“uuid char”),它确保将列类型创建为“uniqueidentifier”,但是,当读取/写入数据库时,UUID顺序与预期一致(即,当您在SSMS中查看字段时,它看起来与在UUID上使用.toString()时相同)。我尝试了该解决方案,但没有成功,我的数据库只有一个GUID,但当我从表中获取数据时,它会生成不同的UUID。感谢您的任何帮助。