java Envers在插入子实体时审核父实体,但在更新时不审核
我的应用程序中有一个Store/Clerks类,它们通过“Clerks”DB表中的“storeId”外键与以下代码中给出的Hibernate注释相关联:
商店。爪哇:
@Entity
@Audited
@Table(name="stores")
Public Class Store {
private Set<Clerks> clerks;
//....
@OneToMany(fetch = FetchType.LAZY, mappedBy = "store")
public Set<Clerks> getClerks() {
return clerks;
}
}
职员。爪哇:
@Entity
@Audited
@Table(name="clerks")
Public Class Clerk {
private Store store;
//....
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "storeId",referencedColumnName = "storeId")
public Store getStore() {
return store;
}
}
当我插入(持久化)新职员时,Envers会在两个实体的审计表中创建条目(“stores_aud”和“clerks_aud”)。 但是,当我更新现有的职员时,它只在“clerks_aud”表中输入一个条目
有谁能向我解释一下,为什么会发生这种情况,以及如何强制Envers在这两种情况下表现相同(插入和更新)
多谢各位
# 1 楼答案
将新的
Clerk
添加到Store
时,Store#clerks
集合将被更改,这将导致Store
的新审核条目。更改Clerk
时,不会更改Store
的字段,因此不会为其生成审核条目,只为Clerk
如果您想在更新
Clerk
时为Store
生成审计条目,您必须自己处理。一个常见的解决方案是在Store
上有类似lastUpdated
列的内容,每当发生变化时,都会对其进行更新