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

版权声明:程序猴jwang版权所有 https://blog.csdn.net/qq_21046965/article/details/86601531

前言

      本章讲解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没有,数据库中有。 

猜你喜欢

转载自blog.csdn.net/qq_21046965/article/details/86601531
今日推荐