Hibernate三种状态以及他们如何转换

Hibernate  提供了三种状态,分别是:

瞬时状态(transient):有人有删除状态,归并在这里;(对象未被初始化之前),实例对象通过new关键字在内存中开辟空间,但是此时并没有纳入到Hibernate的session中,如果变量对它作用,那么它就会被JVM(Java虚拟机)回收,瞬时对象在内存中是孤立的,它与数据库没有任何的关系,仅仅是一个信息携带的载体,加入一个对象一个瞬时对象被转换为持久状态,那么它的生命周期由JVM管理

持久状态(persisent):(对象被持久化)持久状态和数据库进行连接,他总是与session(一级缓存)和事务(Transaction)关联在一起,当持久状态下对对象进行数据库操作并不会立即执行SQL语句,而是等到事务的提交阶段(transaction.commit()),通过对比与数据库数据是否相同,如果不同,则进行更新操作。当对象由持久状态转变为游离状态,它的生命周期由session管理;

游离状态(detached):(对象曾经被持久化过,但是已经和session进行detached),此时数据库存在,但是session中不存在;当对象的session关闭,这个对象就从持久状态转变为游离状态,如果将该对象添加到新的session对象中,我们称之为跨session进行维护;

 

三种状态之间的转换:方法的使用请参考另外一篇博客https://mp.csdn.net/postedit/85335538

  • 临时状态(瞬时状态):通过new方法创建,前面的都是Hibernate开启session的操作,本章不进行深究;

 

  • 持久状态(Persist):

方式一:直接为持久状态:通过get/load(懒加载区别,本质一样),find(),iterate()方法;

方法的使用请参考另外一篇博客,本章只是探讨状态之间的关系

方式二:由临时态转变为持久态,通过save(),saveOrUpdata()方法

方式三:由游离态转变为持久态

  • 游离状态:数据库存在,session中不存在

 

 

总结:

  1. 对于一个刚创建的对象(new),此时session和数据库中都不存在,那么该对象处于临时状态(瞬时对象);
  2. 对于通过调用save()方法,或者游离状态通过updata()转变为持久状态,只有在commit()时,才会通过比较进行更新操作;
  3. 离线对象,数据库中存在,只是没交给session管理

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值