hibernate持久化对象的状态

分类

临时态

临时态是指实例化之后,未被session管理的对象,可以认为就是普通的对象

持久态

持久态,两个条件:1、已有OID。2、被session管理。
OID指的是该对象已经与数据库中的一条记录关联,可以对应到数据库中。
被session管理则是指该对象受hibernate的管理,具有与数据库记录同步的能力,
对对象属性的增删改查与数据库关联

脱管态

托管状态与持久状态相比在于:1、已有OID。2、未被session管理。
脱管这两个词就表明了该状态的意思,意即脱离session的管理,该对象已经失去了和数据库关联的媒介——session.

状态转换

首先我们创建一个普通的对象 User u = new User()
这是该对象并没有与数据库关联,此时处于临时态
接着我们为他的属性赋值
u.setId(1)
u.setName(“小明”)
u.setSex(“男”)
u.setAge(“18”)

这里有一点需要注意的是持久化对象的ID属性是必要的,因为要靠对象的ID对应数据库中记录的ID session也是靠他生成持久化对象的OID


赋值完毕,开始对该对象持久化
**session.beginTransaction();
session.save(u);
session.getTransaction().commit();
**

这时我们已经将u由临时态转化成了持久态并保存在数据库中了,临时态转换成持久态通过save()或者saveOrUpdate()方法实现

完成持久化了我们本次操作假设结束了
session.close()
执行这条语句之后,对象变成了脱管态。
save()之后,对象具有了OID,并与session关联,这里我们session.close()关闭了session,对象仍具有OID但他已经不受session的管理了(没有session了)。


持久态向临时态的转换

持久态向临时态转换,移除对象的OID以及和session的关联

session.delete(u);
将对应OID 数据库中的记录删除,自然OID就删除了,session也无法管理了

你可能感兴趣的:(学习笔记)