我们正在为我们的应用程序实现活动日志。我们决定采用捕获休眠 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.Transient 2.Persistant 3.Detached
如果我们创建一个新对象,它就是瞬态。现在,当我们更新或保存或更新或与休眠会话合并时,对象将变为持久化。
在这种情况下,如果我们使用 hibernate postupdateevent 来捕获更新,我们只会在使用 merge 时获取旧值,而在使用 update 或 saveorupdate 时不会获取值。我的理解是 saveorupdate 也确实会调用以确定它是插入还是更新,在这种情况下,我希望它在我们执行 saveorupdate 时在休眠 postupdate 事件中提供旧值,类似于我们在合并时得到的值。但是我们没有得到 saveorupdate 和 update 调用,我们只是得到了合并的旧值。
如果我们用于审计日志,它听起来像 postupdateevent 监听器,使用 saveorupdate 或 update,它不会给我们旧值。
我在这里错过了什么吗?