首页 > 解决方案 > 带有“默认 NEWID()”的 SQL Server UNIQUEIDENTIFIER 的 JPA 映射

问题描述

我正在努力将 JPA 映射实体(通过 Spring Data CrudRepository)插入到 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

尽管列定义。

如何设置映射以正确获取 SQL Server 生成的 UUID 值或存储 Hibernate 生成器策略生成的 UUID 值?

标签: javasql-serverhibernatejpa

解决方案


推荐阅读