提问者:小点点

Hibernate envers无法从hibernate-type-52识别PostgreSQLInetType类型


Hibernate envers无法识别使用hibernate类型库中的@TypeDef注释创建的自定义类型。

我有一个使用自定义类型PostgreSQLInetType. class的实体:

@Entity
@Table(name = "my_acl")
@TypeDef(typeClass = PostgreSQLInetType.class, defaultForType = Inet.class)
@Audited
public class MyAcl {

  Inet acl;

//other fields, getters\setters etc.



}

但是在我的SpringBoot应用程序启动期间,我得到了以下异常:

Caused by: org.hibernate.MappingException: Type not supported for auditing: com.vladmihalcea.hibernate.type.basic.PostgreSQLInetType, on entity org.acme.MyAcl, property 'acl'.

有什么方法可以解决这个问题或告诉Envers如何映射PostgreSQLInetType?


共3个答案

匿名用户

我创建了一个PR到hibernate类型项目来解决这个问题:https://github.com/vladmihalcea/hibernate-types/pull/464.

PR被合并,您可以看到ImmutableType现在实现了BasicType

请升级到hibernate类型版本2.17.3或更高版本才能使此修复工作。

匿名用户

要供Envers使用,该类型必须实现org. hibernate.type.BasicType接口。

匿名用户

要使用自定义Hibernate类型的审核注释,请使用
@Type(type="com. example.StringBufferStringType")crate两个文件来配置自定义类型,并确保不返回任何特定的字符串,如名称,因为在创建表时,实体表可能会被创建,但在创建审核表时,它会抛出错误,例如无法确定特定的列数据类型。

要解决上述问题,返回null

 public String getName() {
    return null;
}

通过给定的链接获得更多的见解。

https://docs.jboss.org/hibernate/orm/5.3/userguide/html_single/Hibernate_User_Guide.html#basic-lob