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在两种情况下行为相同(插入和更新)?

谢谢


当您添加一个新的ClerkStoreStore#clerks收集被改变,这将导致新的审核项Store 。 当Clerk被更改时, Store任何字段都不会更改,因此不会为其生成审核条目,仅供Clerk

如果您还想在更新Clerk时为Store生成审核条目,则必须自己处理。 一个常见的解决方案是在Store上有lastUpdated列,当有事情发生变化时,你会更新它。

链接地址: http://www.djcxy.com/p/71557.html

上一篇: Envers audits parent entity when inserting a sub

下一篇: Can I change and how to change REVTYPE values in Hibernate Envers?