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?
我创建了一个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