Envers在插入子实体时审核父实体,但在更新时不审计

时间:2014-12-11 10:10:01

标签: java hibernate hibernate-envers

我的应用程序中有一个Store / Clerks类,通过" storeId" "职员的外键" DB表,以及以下代码中给出的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在两个实体的审计表中创建条目(&#34; stores_aud&#34;和&#34; clerks_aud&#34;)。 但是,当我更新现有的秘书时,它只会在&#34; clerks_aud&#34;表

任何人都可以向我解释,为什么会发生这种情况,以及如何强制Envers在两种情况下都表现相同(插入和更新)?

谢谢

1 个答案:

答案 0 :(得分:2)

当您向Clerk添加新的Store时,Store#clerks集合会被更改,从而导致Store的新审核条目。更改Clerk后,Store的任何字段都不会更改,因此不会为Clerk生成任何审核条目。

如果您想在更新Store时生成Clerk的审核条目,则必须自行处理。一个常见的解决方案是在lastUpdated上添加类似Store列的内容,只要发生更改,您就会更新。