Java 未找到Envers-MappedSuperclass属性@AuditMappedBy指向一个不包含';不存在
我正在尝试将envers添加到我的项目中,但MappedSuperclass属性的可见性有问题。结构如下:Java 未找到Envers-MappedSuperclass属性@AuditMappedBy指向一个不包含';不存在,java,spring,hibernate,audit,hibernate-envers,Java,Spring,Hibernate,Audit,Hibernate Envers,我正在尝试将envers添加到我的项目中,但MappedSuperclass属性的可见性有问题。结构如下: public class JoinedEntity { @Singular @OneToMany(mappedBy = "field", cascade = CascadeType.ALL, orphanRemoval=true) @LazyCollection(LazyCollectionOption.FALSE) @AuditMappedBy(mappedBy = "
public class JoinedEntity {
@Singular
@OneToMany(mappedBy = "field", cascade = CascadeType.ALL, orphanRemoval=true)
@LazyCollection(LazyCollectionOption.FALSE)
@AuditMappedBy(mappedBy = "field")
private List<Child> childs;
}
父抽象类
@MappedSuperclass
abstract class Parent {
@ManyToOne
@JoinColumn(name = "joinedEntity_id")
protected JoinedEntity field;
}
使用@Audited annotation和@AuditOverride扩展父类的两个子类具有相同的结构:
@Audited
@AuditOverride(forClass = Parent.class, isAudited = true)
class Child extends Parent {
Child{ super(...); }
}
以及这样的连接实体:
public class JoinedEntity {
@Singular
@OneToMany(mappedBy = "field", cascade = CascadeType.ALL, orphanRemoval=true)
@LazyCollection(LazyCollectionOption.FALSE)
@AuditMappedBy(mappedBy = "field")
private List<Child> childs;
}
公共类联合{
@奇异的
@OneToMany(mappedBy=“field”,cascade=CascadeType.ALL,orphan=true)
@LazyCollection(LazyCollectionOption.FALSE)
@AuditMappedBy(mappedBy=“field”)
私人名单儿童;
}
这个错误是因为JoinedEntity类无法解析指向抽象类属性的AuditMappedBy,即使我在子类中添加了AuditOverride。以下是错误:
原因:org.springframework.beans.factory.BeanCreationException:创建名为“entityManagerFactory”的bean时出错,该bean在类路径资源[org/springframework/boot/autoconfigure/orm/jpa/hibernatejpaaautoconfiguration.class]中定义:初始化方法调用失败;嵌套异常为org.hibernate.MappingException:@AuditMappedBy指向一个不存在的属性:$path.Child.field我怀疑这是因为您正在使用
@AuditMappedBy
指向一个未审核的属性
如果您查看子项
的定义,@AuditOverride
特别指出,对于在父项
中声明的所有属性,它们都是未经审核的。所以你有3个选择
父类
中的字段
属性定义为正在审核,无论您是通过@AuditOverride
注释执行此操作,还是专门将@audited
注释添加到父类
中的属性中,都应该有效JoinedEntity
中的关联定义为未审核的关系。换句话说,这会导致FK值被审核,但它们之间的关系不会被审核。这意味着当您获取JoinedEntity
的修订时,关联总是从ORM主表加载
@Audited(targetAuditMode = RelationTargetMode.NOT_AUDITED)
@AuditMappedBy(mappedBy = "field")
@AuditMappedBy
,因为未审核父类字段属性