首页 > 解决方案 > 使用带有 PostgreSQLRangeType 等类型的休眠环境。有可能吗?有没有不重构遗留代码的简单方法?

问题描述

想知道这个话题是否有新的发展?

在尝试将 hibernate-types-52-library 类型与 Envers 一起使用时,我正面临着你们大多数人在类似情况下所面临的问题......,这个错误:

Invocation of init method failed; nested exception is org.hibernate.MappingException: Type not supported for auditing: com.vladmihalcea.hibernate.type.range.PostgreSQLRangeType, on entity ...

我尝试创建一个自定义方言,例如:

public class CustomPostgresDialect extends PostgreSQL10Dialect {

    public CustomPostgresDialect() {
        super();
        this.registerHibernateType(Types.OTHER, PostgreSQLRangeType.class.getName());
        this.registerColumnType(1111, "range");
    }
}

我在 application.yml (源代码和测试)中都有这个:

  jpa:
    database-platform: <path>.CustomPostgresDialect
    show-sql: false
    open-in-view: false
    properties:
      hibernate:
        dialect: <path>.CustomPostgresDialect
@Entity
@TypeDef(name="range", typeClass = PostgreSQLRangeType.class, defaultForType = Range.class)
public class Spec extends TemporalTable implements Serializable {

    @Type(type = "range")
    private Range<Integer> range;
}
@Entity
@TypeDef(name="range", typeClass = PostgreSQLRangeType.class, defaultForType = Range.class)
public class Spec extends TemporalTable implements Serializable {

    @Type(type = "range")
    private Range<Integer> range;
}

如果这不起作用,是否可以将 [0,15) 保存为 varchar,然后将其转换为范围?这样 Hbn envers 就不会抱怨了。

标签: javaspring-data-jpahibernate-envershibernate-types

解决方案


推荐阅读