系统应用spring aop来记录数据的修改记录,也就是记录系统的update操作。
需要记录操作前和操作后的变化 newEntity和oldEntity
我的做法是写了一个拦截器 如下:
[code="java"]
public class LogAdvice implements MethodBeforeAdvice {
public void before(Method method, Object[] args, Object target)
throws Throwable {
}
[/code]
方法中的第二个参数就是在update操作前的数据,也就是newEntity,那么此时我还需要从数据库中取得oldEntity,
问题就出在这里,因为系统配置了延迟加载,openSessionInView,所以在request还没有完成之前,还是同一个session范围内,那我要用newEntity的id取数据的话,hibernate首先是从session缓存中取,此时session缓存中正好有一个newEntity,所以取到的数据其实还是newEntity,无法取到数据库中的值。
这个问题不知道哪位大虾遇到过或是有什么好的解决办法吗?