Hibernate 6 迁移后无法将 [B 转换为 java.util.UUID

问题描述 投票:0回答:1

迁移到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;

我尝试了一些方法,但没有成功:

  1. 根据迁移说明https://docs.jboss.org/hibernate/orm/6.0/migration-guide/migration-guide.html#_uuid_mapping_changes我添加了 hibernate.type.preferred_duration_jdbc_type=BINARY

  2. 定义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);
    }
    
  3. 在实体的属性上使用@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的人遇到过这个问题吗?

spring spring-boot hibernate spring-data-jpa spring-data
1个回答
0
投票

就我而言,是这样的

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

问题是工具可能会建议版本更新,但不会建议替换依赖项。

© www.soinside.com 2019 - 2024. All rights reserved.