我的应用程序中有一个 Store/Clerks 类,它们通过“clerks”数据库表中的“storeId”外键关联,并与以下代码中给出的 Hibernate 注释相关:
商店.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;
}
}
文员.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”)的审计表中创建条目。 但是,当我更新现有的 Clerk 时,它只会在“clerks_aud”表中创建一个条目。
谁能向我解释为什么会这样,以及如何强制 Envers 在两种情况下(插入和更新)表现相同?
谢谢
最佳答案
当您将新的 Clerk
添加到 Store
时,Store#clerks
集合会被更改,这会导致 的新审计条目存储
。当Clerk
改变时,Store
的字段没有改变,所以没有为其生成审计条目,只是为Clerk
生成。
如果您还想在 Clerk
更新时为 Store
生成审计条目,您将不得不自己处理。一种常见的解决方案是在 Store
上添加类似 lastUpdated
的列,只要有任何更改,您就会更新它。
关于java - Envers 在插入子实体时审核父实体,但在更新时不审核,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27420161/