JPA:如何映射SQL Server uniqueidentifier类型

时间:2012-05-04 15:26:57

标签: java sql-server hibernate

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

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

Hibernate抱怨:

Found: uniqueidentifier, expected: varchar(255)

2 个答案:

答案 0 :(得分:10)

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

我认为guid主键上的String策略仅表示hibernate将为POJO的主键属性生成GUID值,并且此生成的GUID值将插入varchar(255)列模拟uniqueidentifier

的效果

您可以尝试使用@Column

Dialect属性覆盖columnDefinition类指定的映射
 @Id
 @GenericGenerator(name = "generator", strategy = "guid", parameters = {})
 @GeneratedValue(generator = "generator")
 @Column(name = "APPLICATION_ID" , columnDefinition="uniqueidentifier")
 private String id;

答案 1 :(得分:0)

您需要使用uuid2

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

这对我有用。