【问题标题】:Using AttributeConverter converting to UUID results in 'No Dialect mapping for JDBC type' exception使用 AttributeConverter 转换为 UUID 会导致“没有 JDBC 类型的方言映射”异常
【发布时间】:2019-12-30 10:22:08
【问题描述】:

所以我有一个类,假设 Dog(不是实体)只包含一个 UUID 字段。然后我有以下AttributeConverter

@Converter
public class DogConverter implements AttributeConverter<Dog, UUID> {
    @Override
    public UUID convertToDatabaseColumn(final Dog attribute) {
        return attribute.getUuid();
    }

    @Override
    public Dog convertToEntityAttribute(final UUID dbData) {
        return new Dog(dbData);
    }
}

然后我将Dog 用作实体类DogHouse 中的字段:

@Entity
class DogHouse {
    ...
    @Convert(converter = DogConverter.class)
    private Dog dog;
    ...
}

然后我使用 liquibase 针对空的 postgresql 数据库创建差异更改日志,然后导致以下异常:

org.hibernate.MappingException: No Dialect mapping for JDBC type: 206384196

当我更改为DogConverter 以通过还将UUID 映射到字符串来在DogString 之间进行转换时,liquibase 可以正常工作,并且不会出现异常。

有谁知道为什么会发生异常以及如何解决它?

【问题讨论】:

  • @Converter 添加到您的DogConverter.class。然而你的设置看起来你想要一个使用@OneToOne的法线映射
  • @XtremeBaumer @Converter 已经在 DogConverter 上,我忘了在示例中包含它,我编辑了示例。
  • 显示你的hibernate sessionFactory的配置
  • 我遇到了类似的问题,数据库类型也是 UUID - 您找到解决方案还是将其保留为字符串?
  • @MitchKent 我没有找到解决方案,我将其保留为字符串

标签: java postgresql hibernate jpa liquibase


【解决方案1】:

我对 postgis Geometry 有同样的问题,并得出结论,与实体字段支持的类型相比,转换器支持的类型是有限的。 在这篇文章https://gitter.im/hibernate/hibernate-orm?at=5ab11305e4d1c636041f1251 中,如果您搜索“方言”,您会看到类似的问题。答案似乎是使用 Hibernate 5.2 是不可能的。也许 Hibernate 6 可以实现。

【讨论】:

    猜你喜欢
    • 2017-12-16
    • 2012-10-10
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    • 2014-08-08
    • 2015-03-27
    相关资源
    最近更新 更多