【问题标题】:Hibernate Envers: How to capture who deleted an entity in audit tableHibernate Envers:如何捕获谁删除了审计表中的实体
【发布时间】:2020-03-09 00:37:08
【问题描述】:

我正在使用hibernate-enversspring。一切正常,除了当我删除一个实体时,它不会更改审计表内updated_byupdated_date 的值,而是在spring.jpa.properties.org.hibernate.envers.store_data_at_delete=true 之后完全保存一个实体(只是复制)。

我已经尝试注册监听器EventType.PRE_DELETE,但没有帮助。

这是我的更新实体:

@LastModifiedBy
@Column(nullable = false)
private Long updatedBy;

@LastModifiedDate
@Column(nullable = false)
private Date updatedDate;

如何通过修改updated_byupdated_date 列在审计表中捕获谁被删除以及何时被删除?

【问题讨论】:

  • @Andreas 使用JpaRepository
  • @Andreas delete 方法按预期工作,将所有值复制到审计表中。但我想要的是修改 updated_by 和 updated_date 的值`
  • @Andreas 这个问题很不一样

标签: spring hibernate spring-data-jpa hibernate-envers


【解决方案1】:

看起来您正在结合以下功能:审核支持和 Envers。

Envers 记录对您的实体的每次更改,包括删除(如果按照您所做的配置)。

审核支持跟踪更新和插入时间戳和用户。 它不适用于删除,因为没有地方可以存储该信息。

如果您想保留组合并使其仍然有效,您需要修改实体(例如将额外的标志 deleting 设置为 true),刷新它,甚至提交它(我不确定是否这是必要的),然后将其删除。

可能更好的方法是使用自定义修订对象并将所需数据存储在此问题和答案中所述:Ways to pass additional data to Custom RevisionEntity in Hibernate Envers?

【讨论】:

  • 这正是我所做的——结合审计和环境,这是错误的。我通过创建自定义修订对象来完成它。非常感谢
猜你喜欢
  • 2015-12-14
  • 2011-07-10
  • 1970-01-01
  • 2021-04-01
  • 2012-08-13
  • 2012-12-05
  • 2013-06-28
  • 2013-08-27
  • 1970-01-01
相关资源
最近更新 更多