9

我继承了我试图通过 JPA 映射的 SQL Server 数据库。许多表都有一uniqueidentifier列。我正在尝试像这样映射它们:

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

休眠抱怨:

Found: uniqueidentifier, expected: varchar(255)
4

2 回答 2

13

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

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

您可以尝试使用的columnDefinition属性覆盖由Dialect类指定的映射@Column

 @Id
 @GenericGenerator(name = "generator", strategy = "guid", parameters = {})
 @GeneratedValue(generator = "generator")
 @Column(name = "APPLICATION_ID" , columnDefinition="uniqueidentifier")
 private String id;
于 2012-05-05T09:32:06.267 回答
0

你需要使用uuid2

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

这对我有用。

于 2020-10-17T06:28:31.780 回答