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

标签 java hibernate hibernate-envers

我的应用程序中有一个 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/

相关文章:

java - struts2 <s :select. ..> 标签

java - 使用日志工具记录 HQL 返回值时遇到问题

java - Hibernate Envers 与 JBoss、Spring 和 Maven - 不写入审计记录

java - Java中与逻辑运算符的字符串比较

java - 更改相对于 anchor 的 View 大小

java - channel 会减慢读取速度吗?

mysql/javaexecuteUpdate如何返回匹配的行和更新的行

java - 公共(public)数据库/dao 方法应该是静态的吗?

spring-boot - EnversRevisionRepositoryFactoryBean 不为 JPARepositories 创建 bean

java - Hibernate envers 在没有更改时创建记录