gpt4 book ai didi

java - 在 hibernate 的实体监听器中更新之前获取原始对象

转载 作者:行者123 更新时间:2023-12-01 22:53:55 25 4
gpt4 key购买 nike

我正在尝试实现一个实体监听器,用于比较 @PreUpdate 事件中的原始对象和更新后的对象。我尝试使用 Jpa 存储库通过 ID 从数据库查询原始对象,以将其与事件中收到的对象进行比较。但它检索相同的对象(我猜它返回 session 范围中存在的对象)。

有没有办法在实体监听器中从数据库中获取原始对象?

最佳答案

JPA 不提供 EntityListener 中的旧状态和新状态。

但是你可以使用 Hibernates 拦截器:

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

关于java - 在 hibernate 的实体监听器中更新之前获取原始对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58448079/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com