我继承了一个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列的数据类型,该数据类型由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;