迁移到springboot 3.1.2后,从数据库获取结果导致Cannot cast [B to java.util.UUID
postgresql 列定义为“bytea”数据类型,并映射到 java.util.UUID
实体类:
@Id
@Column(name = "SAMPLE_ID", unique = true, nullable = false, columnDefinition = "uuid")
@Getter @Setter private UUID id;
我尝试了一些方法,但没有成功:
根据迁移说明https://docs.jboss.org/hibernate/orm/6.0/migration-guide/migration-guide.html#_uuid_mapping_changes我添加了 hibernate.type.preferred_duration_jdbc_type=BINARY
定义UUID转换器
@Converter(autoApply = true)
public class UuidConverter implements AttributeConverter<UUID, String> {
@Override
public String convertToDatabaseColumn(final UUID entityValue) {
return Optional.ofNullable(entityValue)
.map(entityUuid -> entityUuid.toString())
.orElse(null);
}
@Override
public UUID convertToEntityAttribute(final String databaseValue) {
return Optional.ofNullable(databaseValue)
.map(databaseUuid -> UUID.fromString(databaseUuid))
.orElse(null);
}
在实体的属性上使用@JdbcType(UUIDJdbcType.class)
@Id
@JdbcType(UUIDJdbcType.class)
@Column(name = "SAMPLE_ID", unique = true, nullable = false, columnDefinition = "uuid")
@Getter @Setter private UUID id;
不确定这是hibernate还是spring数据问题,迁移到hibernate6的人遇到过这个问题吗?
就我而言,是这样的
java.lang.ClassCastException:
class [Ljava.util.UUID; cannot be cast to class [B ([Ljava.util.UUID
修复方法是更换
io.hypersistence:hypersistence-utils-hibernate-62
与
io.hypersistence:hypersistence-utils-hibernate-63
问题是工具可能会建议版本更新,但不会建议替换依赖项。