【问题标题】:Hibernate envers ignores types from hibernate-types-52 libraryHibernate envers 忽略来自 hibernate-types-52 库的类型
【发布时间】:2020-11-09 14:45:19
【问题描述】:

我有一个使用休眠环境进行审计的实体。使用 hibernate-types-52 库中的“jsonb”类型作为字段之一。示例:

@Entity
@Audited
@Table(name = "entity")
class Entity() {

@Type(type = "jsonb")
@Column(columnDefinition = "jsonb")
var field1: Map<String, Any> = emptyMap()

}

这是生成的 SQL:

 create table entity (
    field1 jsonb
 )

create table entity_aud (
    field1 uuid     
 )

如您所见,_aud 表中的 field1 没有使用 jsonb 类型。使用 psql_enum 类型时遇到相同的行为。在尝试持久化实体时,这当然是一个例外。如何让 envers 识别这样的类型并使其生成相应的模式?

【问题讨论】:

    标签: hibernate hibernate-envers hibernate-types


    【解决方案1】:

    这很可能是因为 Hibernate 将 JDBC Types.OTHER 映射到 PostgresUUIDType

    正如我在this article 中解释的那样,您可以创建一个自定义Dialect 来扩展PostgreSQLDialect

    public class PostgreSQL10JsonDialect
            extends PostgreSQL10Dialect {
     
        public PostgreSQL10JsonDialect() {
            super();
            this.registerHibernateType(
                Types.OTHER, JsonNodeBinaryType.class.getName()
            );
        }
    }
    

    如果我们通过hibernate.dialect 配置属性提供自定义PostgreSQL10JsonDialect

    <property 
        name="hibernate.dialect"
        value="com.vladmihalcea.book.hpjp.hibernate.type.json.PostgreSQL10JsonDialect"
    />
    

    【讨论】:

      猜你喜欢
      • 2021-11-17
      • 2020-10-20
      • 1970-01-01
      • 2018-10-05
      • 2015-04-16
      • 1970-01-01
      • 1970-01-01
      • 2018-08-18
      • 2016-03-21
      相关资源
      最近更新 更多