我正在使用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;
}
它包含键值对。此表中的某些字段会自动更新。问题是:是否可以插入或不插入记录到_AUDIT表中,具体取决于'键'的值。属性? 例: 我的表中有记录:
|KEY |VALUE |VERSION
_________________________________
|laskCheckDate|12-01-2017|0
|numberOfsmth |3 |0
如果更新/删除了numberOfsmth,我想将记录插入_AUDIT表,但是如果更新laskCheckDate则不插入。
答案 0 :(得分:1)
您需要做的是扩展EnversPostUpdateEventListenerImpl
事件侦听器类并添加逻辑以检查必要的实体类型和值,并决定是否调用超类来审核更新。
不幸的是,上述方法对新手用户来说有点干扰,如果你不熟悉Hibernate ORM和Envers,我肯定不会建议这样做。
在HHH-11326中有一些关于条件审核的想法,暂定为Envers 6.0计划,您可以根据通过注释绑定到实体的钩子来影响审核。
如果您决定继续前进并扩展5.x中的侦听器,请注意您应始终允许实体的INSERT
发生。如果您正在使用ValidityAuditStrategy
,UPDATE
期望表中存在INSERT
修订版类型,或者策略断言,则这一点变得非常重要。
如果您想要控制的只是UPDATE
s,那么无论您采用哪种策略,这对您来说都不是问题。