如何使用hibernate envers避免不必要的审计

时间:2017-06-22 12:02:29

标签: spring hibernate jpa audit hibernate-envers

我是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)
}

提前致谢

1 个答案:

答案 0 :(得分:1)

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

DefaultAuditStrategy应该只是不注册post-insert事件监听器。你可以通过注册你自己的envers集成器来注册那个特定的事件处理程序。

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

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

但所有这一切的关键是有条件审核,请参阅参考文档以获取信息。