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