Hibernate的学习之路十(持久化对象的三个状态)
2017-12-01 14:32
295 查看
前言
我们在对数据库进行操作的时候,都会创建JavaBean的对象,这篇主要说明了这个对象的三种状态。分析
持久化对象的状态1. Hibernate的持久化类 * 持久化类:Java类与数据库的某个表建立了映射关系.这个类就称为是持久化类. * 持久化类 = Java类 + hbm的配置文件 2. Hibernate的持久化类的状态 * Hibernate为了管理持久化类:将持久化类分成了三个状态 * 瞬时态:Transient Object * 没有持久化标识OID, 没有被纳入到Session对象的管理. * 持久态:Persistent Object * 有持久化标识OID,已经被纳入到Session对象的管理. * 脱管态:Detached Object * 有持久化标识OID,没有被纳入到Session对象的管理.
以下是编写的代码demo,可以加深理解
/** * 演示持久类的对象的三个状态 */ @Test public void run3(){ // 获取session Session session = HibernateUtils.getSession(); Transaction tr = session.beginTransaction(); // 持久User的对象 // 瞬时态:没有OID的值,没有被session管理,此时user对象是瞬时态对象 User user = new User(); user.setName("小泽老师"); user.setAge(48); // 使用session保存用户 // user对象中已经存在id的值,默认的情况下,把user对象也保存到session的缓存中 Serializable id = session.save(user); System.out.println("主键的值:"+id); // user是持久态对象 tr.commit(); // session销毁,缓存没有了 session.close(); // 打印 // user对象存在id值,session销毁了,缓存不存在,session管理user对象?不管理 // user是托管态的对象 System.out.println(user.getId()); System.out.println(user.getName()); }
Hibernate持久化对象的状态的转换
1. 瞬时态 -- 没有持久化标识OID, 没有被纳入到Session对象的管理 * 获得瞬时态的对象 * User user = new User() * 瞬时态对象转换持久态 * save()/saveOrUpdate(); * 瞬时态对象转换成脱管态 * user.setId(1) 2. 持久态 -- 有持久化标识OID,已经被纳入到Session对象的管理 * 获得持久态的对象 * get()/load(); * 持久态转换成瞬时态对象 * delete(); --- 比较有争议的,进入特殊的状态(删除态:Hibernate中不建议使用的) * 持久态对象转成脱管态对象 * session的close()/evict()/clear(); 3. 脱管态 -- 有持久化标识OID,没有被纳入到Session对象的管理 * 获得托管态对象:不建议直接获得脱管态的对象. * User user = new User(); * user.setId(1); * 脱管态对象转换成持久态对象 * update();/saveOrUpdate()/lock(); * 脱管态对象转换成瞬时态对象 * user.setId(null); 4. 注意:持久态对象有自动更新数据库的能力!!!
自动更新数据库能力
Hibernate还有一个重要的特性九是可以自动更新数据库的能力,是靠session这个一级缓存来实现的。就算不使用update()这个方法也可以修改数据,代码如下:/** * 持久态的对象有自动更新数据库的能力 * session的一级缓存!! */ @Test public void run1(){ Session session = HibernateUtils.getSession(); Transaction tr = session.beginTransaction(); // 获取到持久态的对象 User user = session.get(User.class,1); // user是持久态,有自动更新数据库的能力 System.out.println(user.getName()); // 重新设置新的名称 user.setName("隔离老王"); // 正常编写代码 // session.update(user); tr.commit(); session.close(); }
相关文章推荐
- Hibernate的学习之路十(持久化对象的三个状态)
- Hibernate的学习之路十(持久化对象的三个状态)
- Hibernate的学习之路十(持久化对象的三个状态)
- Hibernate的学习之路十(持久化对象的三个状态)
- Hibernate的学习之路十(持久化对象的三个状态)
- Hibernate的学习之路十(持久化对象的三个状态)
- Hibernate的学习之路十(持久化对象的三个状态)
- Hibernate的学习之路十(持久化对象的三个状态)
- Hibernate的学习之路十(持久化对象的三个状态)
- Hibernate的学习之路十(持久化对象的三个状态)
- Hibernate的学习之路十(持久化对象的三个状态)
- Hibernate的学习之路十(持久化对象的三个状态)
- Hibernate的学习之路十(持久化对象的三个状态)
- Hibernate的学习之路十(持久化对象的三个状态)
- 深入学习Hibernate持久化对象的三个状态
- [原创]java WEB学习笔记79:Hibernate学习之路--- 四种对象的状态,session核心方法:save()方法,persist()方法,get() 和 load() 方法,update()方法,saveOrUpdate() 方法,merge() 方法,delete() 方法,evict(),hibernate 调用存储过程,hibernate 与 触发器协同工作
- 【Hibernate学习】——持久化对象的三种状态
- 【Hibernate框架学习】:Hibernate进阶之持久化对象状态
- 深入学习Hibernate4_05hibernate中对象的四种状态(临时状态,持久化状态,游离状态,删除状态),以及常用方法的介绍
- Hibernate学习笔记 - Hibernate中持久化对象的状态转换规则