Java JPA:如何映射SQL Server uniqueidentifier类型

Java JPA:如何映射SQL Server uniqueidentifier类型,java,sql-server,hibernate,Java,Sql Server,Hibernate,我继承了一个SQL Server数据库,我正试图通过JPA映射它。许多表都有一个uniqueidentifier列。我正试图这样绘制它们: @Id @GenericGenerator(name = "generator", strategy = "guid", parameters = {}) @GeneratedValue(generator = "generator") @Column(name = "APPLICATION_ID") private String id; Hibernat

我继承了一个SQL Server数据库,我正试图通过JPA映射它。许多表都有一个
uniqueidentifier
列。我正试图这样绘制它们:

@Id
@GenericGenerator(name = "generator", strategy = "guid", parameters = {})
@GeneratedValue(generator = "generator")
@Column(name = "APPLICATION_ID")
private String id;
Hibernate抱怨:

Found: uniqueidentifier, expected: varchar(255)

POJO中主键属性的数据类型确定其映射的DB列的数据类型,该列由类指定。根据hibernate提供的,它没有任何映射到
uniqueidentifier
的数据类型,默认情况下
String
映射到
varchar(255)

我认为
字符串上的
guid
策略只意味着hibernate将为POJO的主键属性生成一个guid值,并且这个生成的guid值将插入到
varchar(255)
列中,以模拟
uniqueidentifier

您可以尝试使用
@Column

 @Id
 @GenericGenerator(name = "generator", strategy = "guid", parameters = {})
 @GeneratedValue(generator = "generator")
 @Column(name = "APPLICATION_ID" , columnDefinition="uniqueidentifier")
 private String id;

您需要使用
uuid2

@Id
@GenericGenerator(name = "generator", strategy = "uuid2", parameters = {})
@GeneratedValue(generator = "generator")
@Column(name = "APPLICATION_ID" , columnDefinition="uniqueidentifier")
private String id;

这对我很有用。

我说服我们的DBA转向基于整数的PKs,但在这么做之前,我应用了columnDefinition=“uniqueidentifier”的建议,解决了类型不匹配的问题。对我也很有用。注意,我能够从@GenericGenerator中删除“parameters”参数,从@Column中删除“name”。我不想覆盖那些值=)警告!已弃用:请改为与自定义实现一起使用。现在它应该是
@GenericGenerator(name=“generator”,strategy=“uuid2”)
。相关: