如何在我的对象保存在数据库中之后才触发属性更改事件

时间:2011-12-21 12:38:00

标签: hibernate spring events

我正在使用hibernate和spring,我需要对特定对象的属性更改事件做出反应。 我想在数据保存在数据库中之后才能获取事件。 有没有办法使用交易? 休眠是否提供此选项?

由于

3 个答案:

答案 0 :(得分:1)

Hibernate Interceptors or Event listeners是满足此要求的常用方法。如果您决定使用拦截器,请务必阅读documentation,因为它可能会变得棘手。例如,onFlushDirty是检测更改和执行审核日志记录的好地方,但是:

  

请注意,并非所有刷新都与数据库实际同步结束,在这种情况下,新的currentState将传播到对象,但不一定(立即)传播到数据库。

这意味着onFlushDirty在实际写入数据库之前可以使用完全相同的数据调用任意次。为了避免在我们的示例中重复记录,您可以尝试缓存有关要记录的更改的信息,并且只能通过postFlush写出来。

答案 1 :(得分:0)

您可以使用Hibernate Interceptor或Hibernate事件侦听器执行此操作。有关这两者的更多信息,请参阅Hibernate Docs

答案 2 :(得分:0)

你能否使用AfterReturning方面来做到这一点?使用Spring AOP

可以轻松完成

如果你必须使用Hibernate,你必须编写一个实现PostUpdateEventListener接口的类。 这将要求您提供onPostUpdate方法的具体实现,该方法将为您提供PostUpdateEvent对象。 使用event.getEntity()获取实体并继续。