Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 未找到Envers-MappedSuperclass属性@AuditMappedBy指向一个不包含';不存在_Java_Spring_Hibernate_Audit_Hibernate Envers - Fatal编程技术网

Java 未找到Envers-MappedSuperclass属性@AuditMappedBy指向一个不包含';不存在

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 = "

我正在尝试将envers添加到我的项目中,但MappedSuperclass属性的可见性有问题。结构如下:

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
    ,因为未审核
    父类
    字段
    属性