关于get方法与load方法的区别,我做了实验,结果有点出入,感兴趣的进来看看
看了CSDN上关于get方法与load的方法的区别。我做了一个实验。
论坛上是这样说的:
get ()永远只返回实体类”,但实际上这是不正确的,get 方法如果在session缓存中找到了该id对应的对象,如果刚好该对象前面是被代理过的,如被load 方法使用过,或者被其他关联对象延迟加载过,那么返回的还是原先的代理对象,而不是实体类对象,如果该代理对象还没有加载实体数据(就是id以外的其他属性数据),那么它会查询二级缓存或者数据库来加载数据,但是返回的还是代理对象,只不过已经加载了实体数据。
于是我写了个例子。环境是SSH
userManager.load(User.class,1);
userManager.get(User.class,1);
如果按照上面说的,运行到get的时候应该不发sql语句才对哦。因为已经load一下了。但是我的系统还是发出了sql语句。
请问这是为什么?
可能是因为缓存没有打开的原因吗?