【问题标题】:How to access previous state of Entity?如何访问实体的先前状态?
【发布时间】:2012-01-21 16:49:32
【问题描述】:

我正在尝试检测 Entity 中的更改,以便检测对实体所做的更改,以便我可以记录为任何用户所做的更改。

到目前为止,我已经设法使用:

@EntityListeners(AuditListener.class)
@Entity
public class Entity1{...}

和,

public class AuditListener {
@PostPersist
@PostUpdate
public void setUserInformation(Object entity) {...}
}

现在,我想要的是一种读取实体的先前状态的方法,以便我可以将其与当前值进行比较,并将字段、新值写入审计表以及执行修改的用户。

我知道我可以使用 @PostLoad 并将以前的状态保存在内存中,但我认为必须有更通用的方法来完成相同的操作(更少的硬编码)。

提前致谢。

【问题讨论】:

  • 你好@MДΓΓБДLL,因为@PrePersist/@PreUpdatePersist/Update 发生之前执行,我需要一个初始状态(与第一次加载时相同的数据)。我在某处读到 PersistenceContext 保存每个实体的初始状态,以防它需要执行回滚,但仍然没有找到访问该状态的实现。
  • 明白了。抱歉没用。
  • 不能在setUserInformation方法中重新加载实体吗?
  • 要创建审计日志,您只需保存最新状态。您实际上并不需要当前状态。当前状态是该实体的最后一个审计日志。在方法 setUserInformation 上,例如只保存对象 id、用户和日期。当前状态之前的状态已经在审计日志中。有意义吗?
  • 仍有一些用例可以从中受益,hibernate 允许在其刷新脏事件docs.jboss.org/hibernate/orm/3.3/reference/en/html/events.html 中访问它我很惊讶地发现 JPA 对此没有任何帮助

标签: java jpa entity


【解决方案1】:

Roolback 不会将实体返回到其预更新/预持久状态,它会还原数据库上的任何更改。我认为持久性上下文中没有这样的对象。我认为你应该使用方面。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-07
    • 2021-01-14
    • 2016-09-23
    • 2019-10-17
    • 2021-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多