如何在hibernate中更新之前获得更改的属性?



我有一个用例,在更新实体之前,虽然仍然在服务方法中,我需要找到实体的哪些属性被更改,并且即将被更新。

在侦听器/拦截器中不可能这样做,因为这个动作必须在方法的上下文中完成。

任何想法?

你可以注入这个"上下文";通过一些本地线程进入你的拦截器,并在那里完成你的工作。像这样:

public void myService() {
MyInterceptor.withContext(
() -> {
entityManager.merge(myEntity);
entityManager.flush();
// Your service logic
},
(oldState, newState) -> {
// Your code
}
);
}
public class MyInterceptor extends EmptyInterceptor {
private static final ThreadLocal<UpdateHandler> TL = new ThreadLocal<>();
public static void withContext(Runnable r, UpdateHandler h) {
try { 
TL.set(h);
r.run();
} finally {
TL.remove();
}
}
@Override
public boolean onFlushDirty(
Object entity, 
Serializable id, 
Object[] currentState, 
Object[] previousState, 
String[] propertyNames, 
Type[] types) {
UpdateHandler handler = TL.get();
if (handler != null) {
handler.onUpdate(previousState, currentState);
}
return false;
}
}
public interface UpdateHandler {
public void onUpdate(Object[] oldState, Object[] newState);
}

相关内容

  • 没有找到相关文章

最新更新