Hibernate的session缓存和对象的四种状态

一.session缓存

  说session缓存就得说到JAVA对象的生命周期,当没有任何引用指向一个对象时,对象则可以被gc回收,也就是生命周期结束了

  而hibernate获取一个对象后,会将对象存入session缓存,即使代码中没有任何引用指向对象,session中也有引用指向对象,因此对象不会被gc回收

  当获取对象时,会先在session中找,找到了则直接返回对象引用,不会去访问数据库(注意:session的close方法等会将session缓存清空)

1.session缓存清理及脏检查

  脏检查:缓存中的数据被修改,和数据库中的不符合时,在缓存被清理时,会执行更新语句将缓存中修改的数据更新到数据库中

  缓存清理:在提交事物(commit),session.flush等情况下,session会清理缓存,执行检查,同步数据;

    注意:不是在缓存中对象被改变后就立即清理并更新,而是在特定的时间,条件下进行,减少数据库访问同时保证数据的及时性

二.对象的四种状态

  临时,持久化,删除,游离

1.转换

  持久-游离:session的close,evict,clear等方法

  游离-持久:update等方法

  临时-持久:save,persist等方法

  数据库中加载持久对象:get,load等方法

原文地址:https://www.cnblogs.com/zhangxinly/p/5985487.html