Session的缓存与Hibernate对象

Session的缓存

Java对象的生命周期

如果希望一个Java对象一直处于生命周期中,就必须保证至少有一个变量引用它,或者在一个Java集合中存放了这个对象的引用。

Session的缓存

  • Session对象中维护的缓存即称为Hibernate的一级缓存(first cache)

  • 在Session接口的实现类中定义了一系列的Java集合,这些Java集合构成了Session的缓存

  • Session中的缓存中存放着一系列的持久化对象。

  • Hibernate一级缓存

这里写图片描述

Hibernate对象的三种状态

临时状态/临界状态/瞬时状态(transient)
  • 刚刚使用 new 语句创建对象,还没有被持久化,不处于Session缓存中,处于临时状态的Java对象也被称为临时对象。

  • 特征

    • 不处于Session缓存中,也可以说,不被任何一个Session对象关联

    • 在数据库中没有对应的记录

持久化状态/受管状态(presistent)
  • 对象已经被持久化,并加入到Session的缓存中。处于持久化状态的Java对象被称为持久化对象

  • 特征

    • 被一个Session对象关联

    • 持久化对象和数据库中的相应记录对应

    • Session在清理缓存时会根据持久化对象的属性变化来同步更新数据库

游离状态(detached)
  • 对象已经被持久化,但是不再处于Session的缓存中。处于游离状态的Java对象被称为游离对象。

  • 特征

    • 不再位于Session缓存中,也可以说,游离对象不被Session关联

    • 游离对象是由持久化对象转变过来的,因此在数据库中可能还存在与它对应的记录(前提是没有其他程序删除了这条记录)

    • 游离对象与临时对象的相同之处在于,两者不被Session关联,因此Hibernate不会保证它们的属性发生变化与数据库同步

    • 游离对象与临时对象的区别之处在于,前者是由持久化对象转变过来 的,因此可能还在数据库中存在着对应的记录,而后者没有。

Hibernate对象的比较
是否与Session关联数据库表中是否有对应的记录
临时对象不关联
游离对象不关联
持久化对象关联
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值