我正在使用 hibernate envers 来审核我的实体。我有具有下一个字段的实体:
public class Settings
@Id
@Column(length = 80)
private String key;
@NotNull
@Column(length = 1200)
private String value;
@Version
@Column(columnDefinition = "numeric")
private Integer version;
}
它包含键值对。该表中的某些字段会自动更新。问题是:是否可以根据“key”属性的值将记录插入或不插入到 _AUDIT 表中? 例子: 我的表中有记录:
|KEY |VALUE |VERSION
_________________________________
|laskCheckDate|12-01-2017|0
|numberOfsmth |3 |0
如果 numberOfsmth 更新/删除,我想将记录插入到 _AUDIT 表中,但如果更新 laskCheckDate 则不插入记录。
最佳答案
您需要做的是扩展EnversPostUpdateEventListenerImpl
事件监听器类并添加逻辑来检查必要的实体类型和值,并决定是否调用父类(super class)来审核更新或不。
不幸的是,上述方法对于新手用户来说有点干扰,如果您不是非常熟悉 Hibernate ORM 和 Envers,我当然不建议您这样做。
HHH-11326中有一些关于条件审计的想法这是 Envers 6.0 的暂定计划,您可以根据通过注释与实体绑定(bind)的 Hook 来影响审核。
如果您决定在 5.x 中继续前进并扩展监听器,请注意您应该始终允许实体发生 INSERT
。如果您使用 ValidityAuditStrategy
,这一点就变得极其重要,因为 UPDATE
期望表中存在 INSERT
修订类型,否则策略断言。
如果您想要控制的只是UPDATE
,那么无论您采用哪种策略,这对您来说都不是问题。
关于java - 根据条件插入到 hibernate 审计表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47079337/