如果使用saveorUpdate或update,则Hibernate PostUpdateEventListener不会给出旧值状态

时间:2018-07-10 19:15:23

标签: spring hibernate post-update

我们正在为应用程序实现活动日志。我们决定采用捕获休眠的postupdateevent侦听器,捕获旧值和新值以及更新活动日志的方法。该方法在我们进行合并操作的任何地方都有效。但是,当我们使用saveorupdate或update时,并没有获得旧值。

PostUpdateEvent postUpdateEvent = (PostUpdateEvent) event;
                Field[] fields = postUpdateEvent.getEntity().getClass().getDeclaredFields();
                String[] propertyNames = postUpdateEvent.getPersister().getEntityMetamodel().getPropertyNames();
                Object[] newStates = postUpdateEvent.getState();
                Object[] oldStates = postUpdateEvent.getOldState();

编辑: 在此过程中,很少有疑问,关于我所理解的空白。 关于休眠,有三种状态: 1.瞬态 2.坚持 3.独立

如果创建一个新对象,则它是瞬态。现在,当我们进行更新或saveorupdate或与休眠会话合并时,该对象将变为持久对象。

在这种情况下,如果我们使用休眠的postupdateevent捕获更新,则仅在使用merge时才获取旧值,而在使用update或saveorupdate时不获取值。 我的理解是saveorupdate也确实会调用它来确定它是插入还是更新,在这种情况下,我期望当我们执行saveorupdate时,它在休眠的postupdate事件中提供旧值,类似于合并时所得到的值。 但是我们没有得到saveorupdate和update调用,只是获得了用于合并的旧值。

如果我们用于审核日志,则听起来像postupdateevent侦听器,使用saveorupdate或update时,它不会提供旧值。

我在这里想念什么吗?

0 个答案:

没有答案