2010-03-26 35 views
3

在一个持久对象中,如果我只改变一个字段,是否有可能通过Hibernate找出已改变的字段? 我知道我可以得到整个旧行和新行并进行比较。有没有办法只使用Hibernate从对象中获取已更改的列?

+0

您想在哪一点更改行?保存之后,保存之后,过一会儿? – Bozho 2010-03-26 07:01:54

+0

@Bozho保存之前,我可以记录哪一列更新。 – 2010-03-26 07:31:17

回答

5

一个选项是挂钩Hibernate的事件系统(请参阅docs)。例如,如果您注册接收FlushEntityEvent,则会通过getDirtyProperties方法通知您哪些列正在更改。

7

根据您的评论之一,我的理解是您正在寻找一个审计解决方案,所以我建议您检查Envers,这正是关于这一点的。

Envers项目旨在实现持久化类的简单审核/版本控制。你所要做的就是用@Audited注释你想要审计的持久类或它的一些属性。对于每个审计实体,将创建一个表格,该表格将保存对实体所做更改的历史记录。然后您可以毫不费力地检索和查询历史数据。

+0

是的,我正在寻找一个审计解决方案。但是,envers告诉天气审计领域已经改变或没有改变,而不是哪个领域改变。还需要单独的表来存储审计数据。 – 2010-03-30 06:26:42

相关问题