Hibernate环境忽略Hibernate-types-52库中的类型



我有一个实体,它使用hibernate环境进行审计。使用";jsonb";从hibernate-types-52库中为其中一个字段键入。示例:

@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表中的field1。使用psql_enum类型时出现相同行为。当试图持久化一个实体时,这当然是一个例外。如何使enver识别这样的类型并相应地生成模式?

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

正如我在本文中所解释的,您可以创建一个自定义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"
/>

相关内容

  • 没有找到相关文章

最新更新