我们正在为应用程序实现活动日志。我们决定采用捕获休眠的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时,它不会提供旧值。
我在这里想念什么吗?