【发布时间】:2010-03-26 07:00:07
【问题描述】:
在一个持久对象中,如果我只更改一个字段,是否可以仅通过 Hibernate 找出更改的字段? 我知道我可以得到整个旧行和新行并进行比较。
【问题讨论】:
-
您希望在什么时候更改行?保存之前,保存之后,一段时间后?
-
@Bozho 保存之前,这样我就可以记录哪一列更新了。
在一个持久对象中,如果我只更改一个字段,是否可以仅通过 Hibernate 找出更改的字段? 我知道我可以得到整个旧行和新行并进行比较。
【问题讨论】:
根据您的一条评论,我的理解是您正在寻找审计解决方案,因此我建议您查看Envers,这正是关于此的。
Envers 项目旨在实现对持久类的轻松审计/版本控制。您所要做的就是使用@Audited 注释您想要审计的持久类或其某些属性。对于每个被审计的实体,将创建一个表,其中将保存对该实体所做的更改的历史记录。然后,您可以轻松检索和查询历史数据。
【讨论】:
一种选择是挂钩到 Hibernate 的事件系统(请参阅docs)。例如,如果您注册接收FlushEntityEvent,那么您将通过事件的getDirtyProperties 方法获知哪些列正在更改。
【讨论】: