Envers在插入子时会审核父实体
我的应用程序中有一个Store / Clerks类,它们通过“clerks”数据库表中的“storeId”外键以及以下代码中给出的Hibernate注释相关联:
Store.java:
@Entity
@Audited
@Table(name="stores")
Public Class Store {
private Set<Clerks> clerks;
//....
@OneToMany(fetch = FetchType.LAZY, mappedBy = "store")
public Set<Clerks> getClerks() {
return clerks;
}
}
Clerk.java:
@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;
}
}
当我插入(坚持)新的Clerk时,Envers在两个实体(“stores_aud”和“clerks_aud”)的审计表中输入条目。 但是,当我更新现有文员时,它只会在“clerks_aud”表中输入一个条目。
任何人都可以向我解释,为什么会发生这种情况,以及如何强制Envers在两种情况下行为相同(插入和更新)?
谢谢
当您添加一个新的Clerk
来Store
, Store#clerks
收集被改变,这将导致新的审核项Store
。 当Clerk
被更改时, Store
任何字段都不会更改,因此不会为其生成审核条目,仅供Clerk
。
如果您还想在更新Clerk
时为Store
生成审核条目,则必须自己处理。 一个常见的解决方案是在Store
上有lastUpdated
列,当有事情发生变化时,你会更新它。
上一篇: Envers audits parent entity when inserting a sub
下一篇: Can I change and how to change REVTYPE values in Hibernate Envers?