4.Hibernate持久化对象的(瞬时、持久、游离)状态

一、三种状态的简述

Hibernate里有三种对象状态:临时状态 (Transient)、持久状态(Persistent)、游离状态(Detached)持久状态对象也叫PO (PersistentObject) 临时状态和游离状态的对象也叫VO(ValueObject)。

二、瞬时状态

瞬时状态的实例是有new命令创建,开辟内存空间的对象,不存在Id(相当于主键值),尚未与Session关联,在数据库中也没有记录,失去引用后自动被JVM回收,瞬时状态的对象在内存中是孤立存在的,与数据库中的数据无任何关联,仅仅是一个信息携带的载体。

例如:

//瞬时状态
Person person = new Person();//无Id,并没有在session缓存中
person.setName("JumpLin");
person.setAge(19);
person.setBirthday(new Date());
System.out.println("===========打印瞬时状态下的Person对象");
System.out.println(person.toString());

打印结果:
在这里插入图片描述

三、持久状态

持久状态存对象存在Id,加入到了Session缓存中,并且相关联的Session没有关闭,在数据库中有对应的记录,每条记录只对应唯一的持久对象,需要注意的是,持久状态对象是在事务还为提交前变成持久状态的。 session.get()或者session.loda()获取的对象直接是持久对象,如果想把瞬时状态对象转换到持久对象通过session.save()方法将实体对象保存到数据库中然后在和session绑定关联。

例如:

// 此时对象属于无Id,没有于session建立关联的瞬时状态
Person person = new Person();
person.setName("JumpLin");
person.setAge(19);
person.setBirthday(new Date());
//使用session.save()方法将实体对象转换为持久状态,并将属性存储到数据库中
session.save(person);
System.out.println("===========打印持久状态下的Person对象");
System.out.println(person.toString());

打印结果:在这里插入图片描述

四.游离状态

当持久状态的实例,与Session的关联被关闭时就变成了游离状态。游离状态对象存在id,并且仍然与数据库中的数据存在关联,只是失去了与当前Session的关联,游离状态对象发生变化时Hibernate不能检测到。

//关闭session
session.close();

五.三种状态切换图

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值