Hibernate应用中Java对象的状态

Hibernate应用中Java对象的状态

当应用程序通过new语句创建了一个对象,这个对象的生命周期就开始了,当不再有任何引用指向它的时候,这个对象就结束生命周期,它占用的内存就可以被JVM的垃圾回收器回收

对于需要被持久化的Java对象,在它的生命周期中。可处于以下三个状态之一

  • 瞬时状态(临时状态) transient:刚刚用new创建,还没有被持久化,不处于Session的缓存中,处于临时状态的Java对象被称为临时对象(无数据、无Session)
  • 持久化状态 persistent:已经被持久化,加入到Session的缓存中。处于持久化状态的Java对象被称为持久化对象(有数据,有Session)
  • 游离状态 detached:已经被持久化,但不再处于Session的缓存中。处于游离状态的Java对象被称为游离对象(有数据,无Session)

程序代码

Person对象的生命周期

Person对象的状态

tx=session.beginTransaction();

Person person=new Person(“张三”);

开始生命周期

临时状态

session.save(person);

处于生命周期中

转变为持久化状态

Long id=person.getId();

person=null;

Person person2=(Person)session.load(Person.class,id);

tx.commit();

处于生命周期中

处于持久化状态

session.close()

处于生命周期中

转变为游离状态

System.out.println(person2.getName());

处于生命周期中

处于游离状态

person2=null;

结束生命周期

结束生命周期 

临时状态的特征:

  • 不处于Session的缓存中,也可以说,不被任何一个Session实例关联
  • 在数据库中没有对应的记录

在以下情况下,Java对象进入临时状态

  • 当通过new语句创建了一个Java对象,它处于临时状态,此时不和数据库中的任何记录对应
  • Session的delete()方法能使一个持久化对象或游离对象转变为临时对象。对于游离对象,delete()方法从数据库中删除与它对应的记录;对于持久对象,delete()方法从数据库中删除与它对应的记录,并且把它从Session的缓存中删除 

持久化对象的特征:

  • 位于一个Session实例的缓存中,也可以说,持久化对象总是被一个Session实例关联
  • 持久化对象和数据库中的相关记录对应
  • Session在清理缓存时,会根据持久化对象的属性变化,来同步更新数据库

Session的许多方法都能够触发Java对象进入持久化状态

  • Session的save()方法把临时对象转变为持久化对象
  • Session的load()或get()方法返回的对象总是处于持久化状态
  • Session的list()方法返回的List集合中存放的都是持久化对象
  • Session的update()、saveOrUpdate()使游离对象转变为持久化对象
  • 当一个持久化对象关联一个临时对象,在允许级联保存的情况下,Session在清理缓存时会把这个临时对象也转变为持久化对象 

游离对象的特征:

  • 不再位于Session的缓存中,也可以说,游离对象不被Session关联
  • 游离对象是由持久化对象转变过来的,因此在数据库中可能还存在与它对应的记录(前提条件是没有其他程序删除了这条记录)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值