对象状态

Hibernate学习笔记(四)对象状态与一级缓存

  1. 瞬间态 | 临时态:

    • 没有与Hibernate产生关联
    • 与数据库中的记录没有产生关联(有关联就是与数据库中的id有联系)
  2. 持久态:

    • 与Hibernate产生关联
    • 对象有Id,与数据库中的记录有关联
  3. 游离态 | 托管态:

    • 没有与Hibernate产生关联
    • 对象有Id,与数据库中的记录有关联
  4. 三种状态的转换:

    • 瞬时–》持久
      Hibernate学习笔记(四)对象状态与一级缓存

    • 瞬时–》游离
      Hibernate学习笔记(四)对象状态与一级缓存

    • 持久–》瞬时
      Hibernate学习笔记(四)对象状态与一级缓存

    • 持久–》游离
      Hibernate学习笔记(四)对象状态与一级缓存

    • 游离–》瞬时
      Hibernate学习笔记(四)对象状态与一级缓存

    • 游离–》持久
      Hibernate学习笔记(四)对象状态与一级缓存

    • 三种状态的作用

      • 持久状态,我们使用Hibernate主要是为了持久化我们的数据.
      • 对于对象的状态,我们期望我们需要同步到数据库的数据,都被装换成持久状态
      • 持久化状态特点: Hibernate会自动将持久化状态对象的变化同步到数据库中.

一级缓存

  1. Hibernate缓存:

    • 用来提高效率
    • Hibernate的两种缓存:
      • Session缓存(一级缓存)
      • Hibernate缓存(二级缓存)
  2. 简介:

    • 一级缓存:又称为session级别的缓存。当获得一次会话(session),hibernate在session中创建多个集合(map),用于存放操作数据(PO对象),为程序优化服务,如果之后需要相应的数据,hibernate优先从session缓存中获取,如果有就使用;如果没有再查询数据库。当session关闭时,一级缓存销毁。
  3. 演示:
    Hibernate学习笔记(四)对象状态与一级缓存
    Hibernate学习笔记(四)对象状态与一级缓存
    Hibernate学习笔记(四)对象状态与一级缓存

  4. 一级缓存快照

    • 发现不同:
      Hibernate学习笔记(四)对象状态与一级缓存

    • 原理:
      Hibernate学习笔记(四)对象状态与一级缓存

  5. 一级缓存的细节:

    • HQL查询不会使用一级缓存。
    • HQL语句批量查询的时候,结果会进入缓存。
    • sql查询如果把结果封装到对象中,对象会放入一级缓存,如果没有,则对象不会放入缓存中。
    • 如果生成策略自增的情况下,如果在save或者persist方法之前设置了ID(主键)则
      • persist(持久) 方法 来自于JPA 接口将对象完整的持久化. 持久化也包括对象的ID。在保存之前设置了ID,那么就会将设置的ID进行insert. 但是 主键策略是由数据库来维护. 所以产生矛盾.所以抛出异常.
      • save(保存) 方法来自于Hibernate 所以如果保存的对象在保存之前设置了ID.那么该ID也被认为是无效的ID.
  6. 其他API

    • clear()方法:清除一级缓存
    • refresh()方法:刷新,强制刷新缓存中的对象,只能解决部分缓存与数据库中的数据不一致的现象
    • flush()方法:对比快照,并提交缓存对象 (立刻提交到数据库)

总结

通过缓存,可以更加深入的了解Hibernate框架,并且减少了不必要的代码重复。

相关文章:

  • 2021-09-23
  • 2022-12-23
  • 2021-11-29
  • 2021-05-16
  • 2021-08-01
  • 2021-11-19
  • 2021-06-09
猜你喜欢
  • 2021-04-26
  • 2021-05-10
  • 2021-07-11
  • 2021-04-25
  • 2021-09-08
  • 2021-09-06
相关资源
相似解决方案