Hibernate的一级缓存是由Session提供的,因此它只存在于Session的生命周期中,也就是当Session关闭的时候该Session所管理的一级缓存也会立即被清除。       Hibernate的一级缓存是Session所内置的,不能被卸载,也不能进行任何配置。       一级缓存采用的是key-value的Map方式来实现的,在缓存实体对象时,对象的主关键字ID是Map的key,实体对象就是对应的值。所以说,一级缓存是以实体对象为单位进行存储的,在访问的时候使用的是主关键字ID。       虽然,Hibernate对一级缓存使用的是自动维护的功能,没有提供任何配置功能,但是可以通过Session中所提供的方法来对一级缓存的管理进行手工干预。Session中所提供的干预方法包括以下两种。      evict() :用于将某个对象从Session的一级缓存中清除。      clear() :用于将一级缓存中的对象全部清除。       在进行大批量数据一次性更新的时候,会占用非常多的内存来缓存被更新的对象。这时就应该阶段性地调用clear()方法来清空一级缓存中的对象,控制一级缓存的大小,以避免产生内存溢出的情况。

解决方案 »

  1.   


    总结的不错。
    下面这个给楼主参考
    http://www.idosoft.com.cn/techgather/14.html
      

  2.   


    在同一事务中,多次调用get等查询方法的时候,hibernate先到一级缓存装载,没有才去数据库装载,然后填充一级缓存,可以节省不必要的数据库交互
      

  3.   

    那如果在不同的事务操作时,就没有做到性能上的优化吧而且我觉得很多都是跨事务处理的,这样我用hibernate性能上并没有什么优化?我应该怎么解决呢?
      

  4.   

    一级缓存就是同一session中为了避免重复数据库操作提供的
    按照楼主的这个比方,那就用二级缓存
    有缓存总比没有强呀,呵呵