Hibernate入门(五)Hibernate的对象生命周期

前言

      本章讲解Hibernate中对象的生命周期

方法

1.概念

在执行增删改查的时候,Hibernate的session对象负责进行具体的操作,他所操作的对象将呈现以下三种状态:

  • Transient:瞬时状态,由new命令开辟内存空间的Java对象。
  • Persistent:持久化状态,通过Session的save()或saveOrUpdate()、persist()方法将瞬时对象与数据库相关联,并将数据对应的插入数据库中,此时该瞬时对象转变为持久化对象。
  • Detached:游离状态,当一个Session执行close()或clear()、evict()之后,持久对象变成游离对象。 

具体流程图如下所示:

è¿éåå¾çæè¿°

2.具体流程讲解 

1)new->瞬时状态->持久化状态->游离状态

首先我们通过new一个对象,使得该对象处于瞬时状态

//开启事务
session.beginTransaction();
//对象处于瞬时状态
User user = new User();
user.setUsername("admin");
user.setPassword("admin");

在瞬时状态通过save等方法之后,该对象即转化为持久状态,也就是归session进行管理

//开启事务
session.beginTransaction();
//对象处于瞬时状态
User user = new User();
user.setUsername("admin");
user.setPassword("admin");
session.save(user);
//保存后该对象处于持久状态,归session管理
//提交事务
session.getTransaction().commit();

特别的:当对象处于持久状态的时候,在提交前的任何形式的修改数据都将被记录有效

在持久状态通过clear,close等方法之后,该对象即转化为游离状态

//开启事务
session.beginTransaction();
//对象处于瞬时状态
User user = new User();
user.setUsername("admin");
user.setPassword("admin");
session.save(user);
//保存后该对象处于持久状态,归session管理
//提交事务
session.getTransaction().commit();
DBUtil.close();
//对象处于游离状态

2)get->持久化状态->游离状态->持久状态->游离状态

首先,我们使用get方法在数据库中查到一条数据,此时该数据直接处于持久化状态,被session管理

//开启事务
session.beginTransaction();
//对象处于直接变为持久化状态,归session管理
User user = (User)session.get(User.class, "40288d8168756c3a0168756c3b850000");

当使用clear等方法时,User对象脱离session管理,变为游离状态

//开启事务
session.beginTransaction();
//对象处于直接变为持久化状态,归session管理
User user = (User)session.get(User.class, "40288d8168756c3a0168756c3b850000");
session.clear();
//此刻user变为游离状态

再次对session执行update等方法后,其又再次回到了持久化状态:

//开启事务
session.beginTransaction();
//对象处于直接变为持久化状态,归session管理
User user = (User)session.get(User.class, "40288d8168756c3a0168756c3b850000");
session.clear();
//此刻user变为游离状态
user.setPassword("sa");
session.update(user);
//此刻user对象重新回到持久化状态

当对持久化状态的user对象执行delete方法后,该对象变为瞬时状态,提交后在数据库中不复存在

//开启事务
session.beginTransaction();
//对象处于直接变为持久化状态,归session管理
User user = (User)session.get(User.class, "40288d8168756c3a0168756c3b850000");
session.clear();
//此刻user变为游离状态
user.setPassword("sa");
session.update(user);
//此刻user对象重新回到持久化状态
session.delete(user);
//此刻user对象变为瞬时状态

总结

  • Transient:瞬时状态,session没有,数据库中也没有。
  • Persistent:持久化状态,session有,数据库中也有。
  • Detached:游离状态,session没有,数据库中有。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值