我正在尝试实现一个实体侦听器,该侦听器将@PreUpdate
事件中的原始对象与更新后的对象进行比较。我试图使用Jpa存储库通过ID从数据库查询原始对象,以将其与事件中接收到的对象进行比较。但是它会检索相同的对象(我猜它会返回会话作用域中存在的对象)。
是否可以通过实体侦听器从数据库中获取原始对象?
答案 0 :(得分:0)
JPA不在EntityListener中提供旧状态和新状态。
但是您可以使用休眠拦截器:
public static class LoggingInterceptor extends EmptyInterceptor {
@Override
public boolean onFlushDirty(
Object entity,
Serializable id,
Object[] currentState,
Object[] previousState,
String[] propertyNames,
Type[] types) {
LOGGER.debugv( "Entity {0}#{1} changed from {2} to {3}",
entity.getClass().getSimpleName(),
id,
Arrays.toString( previousState ),
Arrays.toString( currentState )
);
return super.onFlushDirty( entity, id, currentState,
previousState, propertyNames, types
);
}
}
在此示例中,您看到当前和先前状态是可以轻松比较的数组。
请阅读文档:https://docs.jboss.org/hibernate/orm/5.4/userguide/html_single/Hibernate_User_Guide.html#events