二、Hibernate

1.session 一级缓存对象

缓存:经常访问物理数据库,为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能。缓存内的数据是对物理数据源中的数据的复制(内存中数据,缓存),应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据。

1.1 Hibernate 中对象三种状态

  • 临时(瞬时)状态对象(TO)
    特点:对象没有 OID 值(对象 id值,标识唯一的对象),不受 session 管理
  • 持久化状态对象(PO)
    特点:对象有 OID 值(对象 id值,标识唯一的对象),受 session 管理
  • 游离(托管)状态对象(DO)
    特点:对象有 OID 值(对象 id值,标识唯一的对象),不受 session 管理
  • 删除状态(非官方说法)

对象状态的转换:

session 对象方法使用可以影响对象的状态

二、Hibernate_第1张图片
图片.png

1.2 一级缓存区

session 对象的 save、update、get、load、query.list、query.uniqueResult ,query.iterate 等方法执行后,可以把数据放入到一级缓存中

session 对象的 get 、load、 query.iterate方法可以取一级缓存对象数据,而query.list 、 query.uniqueResult 不能取

注意:将来 用 list 方法放,iterate 方法来取,解决了 iterate 的N+1 问题

1.3 快照区

快照区保存的数据是 一级缓存中数据的拷贝,当执行session.flush 方法,或者说在有事务的前提下 tx.commit()(因为提交事务前隐式的执行了session.flush方法),hibernate 就会做 脏数据检查机制:
快照区域的数据跟 数据库中的数据一定是一样的(同步的),如果一级缓存中的数据发生改变,跟快照区中的数据进行匹配,如果有发现有改变,就会发发出去update 语句去更新 一级缓存数据。

你可能感兴趣的:(二、Hibernate)