一级缓存的缺点
1、hibernate的session提供一级缓存,一个session代表一次会话过程,一个session关联一个数据库连接,所以session最好不要长时间保持打开,通常仅用于一个事务中,在事务结束时就应关闭。
2、Session是线程不安全的,被多个线程共享时容易出现问题。
3、session关闭的时候,一级缓存就失效了。
二级缓存的优点
让多个线程和多个事务都可以共享这个缓存,
二级缓存是独立于Hibernate的软件部件,属于第三方的产品,多个厂商和组织都提供有缓存产品,比如ehcache、oscache等。在hibernate中使用二级缓存,首先就要在hibernate.cfg.xml配置文件中配置使用哪个厂家的缓存产品,接着需要配置该缓存产品自己的配置文件,最后配置hibernate中的哪些实体对象要纳入到二级缓存。hibernate在执行任何一次查询的之后,都会把得到的结果放在缓存中,缓存结构可以看作是一个hashtable,key是数据库记录的id,value是id的pojo对象。当用户根据id查询对象的时候(load、Iterator方法)会首先在缓存中查找,如果没有找到再发起数据库查询。