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

对象状态

在这里插入图片描述

  1. 瞬间态 | 临时态:

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

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

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

    • 瞬时–》持久
      在这里插入图片描述

    • 瞬时–》游离
      在这里插入图片描述

    • 持久–》瞬时
      在这里插入图片描述

    • 持久–》游离
      在这里插入图片描述

    • 游离–》瞬时
      在这里插入图片描述

    • 游离–》持久
      在这里插入图片描述

    • 三种状态的作用

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

一级缓存

  1. Hibernate缓存:

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

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

  4. 一级缓存快照

    • 发现不同:
      在这里插入图片描述

    • 原理:
      在这里插入图片描述

  5. 一级缓存的细节:

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

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

总结

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值