java - Envers - 未找到 MappedSuperclass 属性。@AuditMappedBy 指向一个不存在的属性
问题描述
我正在尝试将环境添加到我的项目中,但是 MappedSuperclass 属性的可见性存在问题。结构是这样的:
父抽象类
@MappedSuperclass
abstract class Parent {
@ManyToOne
@JoinColumn(name = "joinedEntity_id")
protected JoinedEntity field;
}
使用@Audited 注解和@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;
}
错误来自 JoinedEntity 类,即使我在子类中添加了 AuditOverride,它也无法解析指向抽象类属性的 AuditMappedBy。这是错误:
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.MappingException: @AuditMappedBy points to a property that doesn't exist: $path.Child.field
解决方案
我怀疑这是因为您使用@AuditMappedBy
的是指向未经审计的财产。
如果您查看 的定义Child
,则@AuditOverride
明确指出对于在 中声明的所有属性Parent
,它们都不会被审计。所以你在这里有3个选择。
field
将类中的属性定义Parent
为被审计,无论您是通过@AuditOverride
注释还是专门将@Audited
注释添加到类中的属性Parent
都应该有效。将 中的关联定义
JoinedEntity
为未被审计的关系。换句话说,这会导致 FK 值被审计,但它们之间的关系没有被审计。这意味着当您获取 的修订版时JoinedEntity
,总是从 ORM 主表中加载关联。@Audited(targetAuditMode = RelationTargetMode.NOT_AUDITED) @AuditMappedBy(mappedBy = "field")
删除,
@AuditMappedBy
因为Parent
类field
属性没有被审计。
推荐阅读
- graphql - AppSync 对具有一对多关系的数据的查询获取我无法计算的数组,即它在响应解析器中不存在
- python - 使用 pytest 在控制台中打印最快的测试
- clockify - Clockify API:在项目中查找任务 - 参数被忽略?
- flutter - 在 Dart 中将整数数组拆分为不同长度的多个块
- python - 具有多个参数的 Dask map 方法
- python - 蟒蛇猜谜游戏:帮助玩家正确答案
- sql - 不同日期的价格数据成一行/两列
- java - 从外部 secrets.txt 获取用户名/密码属性到 app.yaml 中的 DB2 数据源:spring boot
- java - Android Studio - 链接活动
- python - pandas 过滤行值