有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    将新的Clerk添加到Store时,Store#clerks集合将被更改,这将导致Store的新审核条目。更改Clerk时,不会更改Store的字段,因此不会为其生成审核条目,只为Clerk

    如果您想在更新Clerk时为Store生成审计条目,您必须自己处理。一个常见的解决方案是在Store上有类似lastUpdated列的内容,每当发生变化时,都会对其进行更新