我们应该如何在SQL Server上处理Hibernate 6的id

kzmpq1sx  于 2023-02-13  发布在  SQL Server
关注(0)|答案(1)|浏览(166)

我们正在从Hibernate 5迁移到Hibernate 6,并且遇到了ID转换的问题。

@MappedSuperclass
public abstract class Entity {

    @Id
    @Column(name = "ID") 
    @Convert(converter = UUIDConverter.class)
    private UUID id = UUID.randomUUID();
}

转换器设置如下:

@Converter 
public class UUIDConverter implements AttributeConverter<UUID, String> {
    @Override
    public String convertToDatabaseColumn(UUID attribute) {
        return attribute.toString();
    }

    @Override
    public UUID convertToEntityAttribute(String dbData) {
        return UUID.fromString(dbData);
    }
}

我们使用的是Sql Server,id是数据库中的唯一标识符。如果我们保存id为8f935c03-0971-445e-9526-0ecbc743b470的对象,则该对象在数据库中将保存为035C938F-7109-5E44-9526-0ECBC743B470
对于如何解决这个问题有什么建议吗?处理id 's的最佳实践方法是什么?一些文档说我们不应该将@Id与@Convert结合使用,但是我们还没有找到替代方法。
我们尝试在转换器中转换为大写,并尝试在IdClass中使用。

dly7yett

dly7yett1#

JPA现在提供了对UUID内置函数的支持,因此它应该像下面这样简单:

@MappedSuperclass
public abstract class Entity {

    @Id
    @GeneratedValue
    private UUID id;
}

或者,如果需要更多的控制,请查看org.hibernate.annotations中的@UuidGenerator注解。
https://docs.jboss.org/hibernate/orm/6.2/javadocs/org/hibernate/annotations/UuidGenerator.html

相关问题