【问题标题】:Is there a way to get only the changed columns from an object using Hibernate?有没有办法使用 Hibernate 从对象中仅获取更改的列?
【发布时间】:2010-03-26 07:00:07
【问题描述】:

在一个持久对象中,如果我只更改一个字段,是否可以仅通过 Hibernate 找出更改的字段? 我知道我可以得到整个旧行和新行并进行比较。

【问题讨论】:

  • 您希望在什么时候更改行?保存之前,保存之后,一段时间后?
  • @Bozho 保存之前,这样我就可以记录哪一列更新了。

标签: java hibernate orm


【解决方案1】:

根据您的一条评论,我的理解是您正在寻找审计解决方案,因此我建议您查看Envers,这正是关于此的。

Envers 项目旨在实现对持久类的轻松审计/版本控制。您所要做的就是使用@Audited 注释您想要审计的持久类或其某些属性。对于每个被审计的实体,将创建一个表,其中将保存对该实体所做的更改的历史记录。然后,您可以轻松检索和查询历史数据。

【讨论】:

  • 是的,我一直在寻找审计解决方案。但是 envers 告诉天气一个被审计的字段是否发生了变化,而不是哪个字段发生了变化。它还需要单独的表来存储审计数据。
【解决方案2】:

一种选择是挂钩到 Hibernate 的事件系统(请参阅docs)。例如,如果您注册接收FlushEntityEvent,那么您将通过事件的getDirtyProperties 方法获知哪些列正在更改。

【讨论】:

  • 链接坏了
猜你喜欢
  • 2018-11-09
  • 2014-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-08
  • 2022-01-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多