spring AOP代理中使用dao查询的结果对象会延用到被代理类

 问题:为什么代理类和被代理类dao查询得到的对象是同一个?

环境:

     springboot,hibernate

1、自定义了一个日志注解

@ApiLog

2、日志注解切面类

//切入点之类的声明
...
@Around("logPointCut()")
public Object aroundAdvice(ProceedingJoinPoint pjp) throws Throwable {
     
     //根据电话查询appUser,查询出来对象为AppUser@18074
     AppUser appUser = userDao.findByPhoneNumber(tokenUtil.getUserInfo());
     
     //日志处理
     ...
}

3、日志注解使用类

@ApiLog(operEvent = "注解使用", operType = 1)
public  Object exchangeAccountAmount() {
    
    //获取到的对象和代理类的是同一个对象,AppUser@18074,求解
    AppUser userInfo = userDao.findByPhone(tokenUtil.getUserInfo());
    
    //业务代码。。
}

 

截图:

 

 

 

这个是不是代理类应该没啥关系,估计是 hibernate 缓存机制导致,具体你百度搜搜看吧

测试用例中没出现这种情况 ,hibernate没开二级缓存

 

要不你在使用类前面改一下这条数据,再查一下,看看是不是还是相同的

自己已解决

问题原因:前后两次共用的同一个session对象,会从session中拿一级缓存

解决办法:在第一次查询后关闭对象即可