JPA:如何映射SQL Server uniqueidentifier类型

Geo*_*old 8 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;
Run Code Online (Sandbox Code Playgroud)

Hibernate抱怨:

Found: uniqueidentifier, expected: varchar(255)
Run Code Online (Sandbox Code Playgroud)

Ken*_*han 10

POJO中主键属性的数据类型确定其映射的DB列的数据类型,该列由Dialect类指定.按照SQLServerDialect由Hibernate提供,它不具有映射到任何数据类型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;
Run Code Online (Sandbox Code Playgroud)

  • 警告![GUIDGenerator](https://docs.jboss.org/hibernate/orm/4.3/javadocs/org/hibernate/id/GUIDGenerator.html)已弃用:使用[UUIDGenerator](https://docs.jboss.org/ hibernate/orm/5.0/javadocs/org/hibernate/id/UUIDGenerator.html)而不是自定义[UUIDGenerationStrategy](https://docs.jboss.org/hibernate/orm/4.1/javadocs/org/hibernate/id/UUIDGenerationStrategy .html)实施.现在它应该是`@GeGeGenerator(name ="generator",strategy ="uuid2")`. (3认同)