You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hibernate Envers无法识别hibernate-types库PostgreSQLInetType类型如何解决

问题原因

Hibernate Envers默认仅内置支持Hibernate官方提供的标准数据类型,第三方扩展的自定义类型需要手动注册到Envers的类型注册表中才会被识别。

解决方案

步骤1:实现自定义Envers审计类型贡献器

实现AuditContributor接口,将PostgreSQLInetType注册到Envers的支持类型列表中:

import org.hibernate.envers.spi.AuditContributor;
import org.hibernate.envers.spi.AuditContribution;
import com.vladmihalcea.hibernate.type.basic.PostgreSQLInetType;

public class CustomAuditTypeContributor implements AuditContributor {
    @Override
    public void contribute(AuditContribution contribution) {
        contribution.getAuditTypeRegistry().register(PostgreSQLInetType.INSTANCE);
    }
}

如果你使用的是Hibernate 5.x版本,AuditContributor的全类名为org.hibernate.envers.configuration.spi.AuditContributor,注册逻辑保持一致即可。

步骤2:注册贡献器到Hibernate配置

Spring Boot项目可通过配置文件直接注册,在application.yml中添加如下配置:

spring:
  jpa:
    properties:
      hibernate:
        envers:
          audit_contributors: 你自己的包路径.CustomAuditTypeContributor

也可通过SPI服务发现注册:在resources/META-INF/services目录下新建名为org.hibernate.envers.spi.AuditContributor的文件,文件内容填写自定义贡献器的全类名即可。

可选补充配置

如果注册后仍有类型识别问题,可在实体类字段上显式指定类型:

@Entity
@Table(name = "my_acl")
@TypeDef(typeClass = PostgreSQLInetType.class, defaultForType = Inet.class)
@Audited
public class MyAcl {
  @Type(type = "com.vladmihalcea.hibernate.type.basic.PostgreSQLInetType")
  Inet acl;
  //其他字段、getter/setter等
}
验证效果

配置完成后重启应用,Envers会正常识别PostgreSQLInetType类型,生成审计表时对应字段也会和业务表保持一致的inet类型,不再抛出类型不支持的异常。

内容的提问来源于stack exchange,提问作者Oleg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 22:54:01