JPA mapping for SQL Server UNIQUEIDENTIFIER with `default NE



我正在努力将JPA映射的实体(通过Spring DataCrudRepository)插入到SQL Server 2019上的表中,该表具有类型为UNIQUEIDENTIFIER的主键列和默认值NEWID()

CREATE TABLE some_table
(
id UNIQUEIDENTIFIER not null primary key default NEWID(),
-- ...
)

问题是,我设法开始工作的所有变化都涉及JPA/Hibernate端上的UUID生成器,并且我最终在表和保存的JPA实体对象中得到两个不同的UUID值。

。这种映射"有效"。从某种意义上说,没有错误报告,但是保存的实体对象的id字段包含的UUID与底层表中作为PK值保存的UUID不同。

@Entity
@Table(name = "some_table")
public class MyEntity {
@Id
@Column(columnDefinition = "uniqueidentifier")
@GeneratedValue
private UUID id;
// ...
}
// id field not set
myEntityRepository.save(myEntity);
// if field set, but value differs from DB

使用@GeneratedValue (strategy = GenerationType.IDENTITY)生成

org.hibernate.id.IdentifierGenerationException: unrecognized id type : uuid-binary -> java.util.UUID

尽管有columndefinition.

我如何设置映射来正确地拾取由SQL Server生成的UUID值或存储由Hibernate生成器策略生成的UUID值?

使用Spring 3/Hibernate 6@Type(type = "uuid-char")

可以指定

spring.jpa.properties.hibernate.type.preferred_uuid_jdbc_type: CHAR

应用程序中的。

参见:https://docs.jboss.org/hibernate/orm/6.2/migration-guide/migration-guide.html