问题:为什么代理类和被代理类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中拿一级缓存
解决办法:在第一次查询后关闭对象即可