我正在努力将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