提问者:小点点

Hibernate envers忽略来自hibernate-type-52库的类型


我有一个使用hibernate envers进行审计的实体。对其中一个字段使用hibernate-type-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     
 )

正如你所看到的,jsonb类型没有被用于_aud表中的field d1。当使用psql_enum类型时,会遇到相同的行为。当尝试持久化一个实体时,这当然是一个例外。我如何让envers识别这样的类型并使其相应地生成模式?


共1个答案

匿名用户

最有可能的是,这是因为Hibernate将JDBCType. O其他映射到PostgresUUIDType

正如我在本文中所解释的,您可以创建一个自定义Dialect来扩展PostgreSQLDialect

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

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

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