如何使用休眠环境避免不必要的审计

Posted

技术标签:

【中文标题】如何使用休眠环境避免不必要的审计【英文标题】:How to avoid unwanted audit using hibernate envers 【发布时间】:2017-11-25 16:54:39 【问题描述】:

我有 spring 和 hibernate 项目,因为我为 Table 配置了审计并且它工作正常,但我的问题是我想在创建新记录时避免审计,但是在更新它时应该在我的代码下面审计

实体:

@Entity
@Table(name = "building")
@Audited
public class BuildingClass extends CommonTableFields 
   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   @Column(name = "BID")
   @JsonProperty
   private long id;

    @JsonProperty
    private String username;

    @JsonProperty
    private double count;
    //getters and setters

实施: // 这里我不想审计

@Override   
public void save(BuildingClass buildingclass) 
       repo.save(buildingclass)

//这里我要审核

@Override   
public void update(BuildingClass buildingclass) 
       repo.save(buildingclass)

提前致谢

【问题讨论】:

见***.com/questions/12800540/… 【参考方案1】:

这将取决于您用于审计的策略。

DefaultAuditStrategy 应该通过简单地不注册post-insert 事件侦听器来工作。您可以通过注册自己的不注册特定事件处理程序的 envers 集成器来做到这一点。

ValidityAuditStrategy 会有点问题。这里的问题是,当修改行时,该策略会在内部执行一组更新操作,并且这些操作期望初始插入审计行存在,如果不存在则会出错。

您可以使用禁用此检查的自定义策略覆盖此策略,但要了解添加检查是为了检测审计行的数据问题,而不是使用假设。

但这一切的关键是条件审计,有关信息,请参阅参考文档。

【讨论】:

以上是关于如何使用休眠环境避免不必要的审计的主要内容,如果未能解决你的问题,请参考以下文章

如何避免警告“使用集合提取指定的 firstResult/maxResults;在内存中应用!”啥时候使用休眠?

使用 Hibernate Envers 进行审计

使用 findAll() 方法时如何避免休眠创建抽象类的对象?

字段更改的休眠审计日志

如何仅使用一个连接在休眠中进行嵌套事务?

使用更新事件进行休眠审计