hibernate的缓存问题,一直比较疑惑。我知道hibernate一级缓存的底层使用map结构实现的。这里的疑问是:hibernate缓存存储的到底有哪些数据:难道只有PO? 
如果有以下语句: 
Objec max = (Object) this.getSession().createQuery("select max(" + code + ")" + " from " + entity).uniqueResult(); 

hibernate会缓存这个max对象吗?? max对象不是pojo。 
只想弄明白:hibernate 会把什么数据放到一级缓存?难道从数据库取出来的数据都会放进去吗? 

解决方案 »

  1.   

    hibernate 的缓存东西比较多
    和你查询所用的方式有关(比如:get、load)等
    还有就是你的缓存策略 
    其实你找点资料全面看一下就知道 
      

  2.   

    如果不在配置文件中指定查询缓存的话, 那么hibernate默认将不会做缓存处理ps:底层数据库那就另当别论了,比如说你连续执行两条相同的sql, 在不同数据库中执行第二次往往要比第一次快另外一级缓存是session的级别的,也就是connection级别, 如果 conn关闭了, 那么其缓存失效
    同一个conn在进行load的时候会进行缓存处理。也就是说 第一次load的时候 hibernate默认会进行缓存处理
    当你第二次load的时候 直接从hibernate缓存中查找, get不进行缓存处理。如果lz要想搞深hibernate的缓存机制的, 建议看一下其自带的 ehcache框架, 学习一下其中的思想
    对你使用hibernate很有帮助的, 那个学起来也不是很费劲,我博客里有一些文档方便的话可以一起探讨
      

  3.   

    hibernate 的一级缓存只会存储预处理的SQL语句,还有所有的配置文件信息!你查出的那个不会存储,预处理的SQL语句只会对按id查询的语句起作用。别的没有什么作用。在hibernate 起动时debug 打出可以看到!
      

  4.   

    这个估计不止吧!pohibernate还是会缓存的!