我们正在从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中使用。
1条答案
按热度按时间dly7yett1#
JPA现在提供了对
UUID
内置函数的支持,因此它应该像下面这样简单:或者,如果需要更多的控制,请查看
org.hibernate.annotations
中的@UuidGenerator
注解。https://docs.jboss.org/hibernate/orm/6.2/javadocs/org/hibernate/annotations/UuidGenerator.html