J2EE系列之Hibernate4学习笔记(六)--Hibernate中对象的4种状态
来源:互联网 发布:军团要塞知乎 编辑:程序博客网 时间:2024/05/22 19:55
Hibernate中对象共有四种状态,这四种状态分别为:
临时状态(transient):刚用new 语句创建,还没有被持久化,并且不处于Sesssion 的缓存中。处于临时状态的Java 对象被称为临时对象。
持久化状态(persistent):已经被持久化,并且加入到Session 的缓存中。处于持久化状态的Java 对象被称为持久化对象。
删除状态(removed):不再处于Session 的缓存中,并且Session 已经计划将其从数据库中删除。处于删除状态的Java 对象被称为删除对象。
游离状态(detached):已经被持久化,但不再处于Session 的缓存中。处于游离状态的Java 对象被称为游离对象。
这里刚刚创建的对象,还没有调用session.save的对象为临时对象;调用了session.save后的对象为持久化对象;调用了session.delete,但是提交事物之前的对象为删除对象;session关闭后的对象成为游离对象。处于删除状态和游离化状态的对象可能会被垃圾回收器回收。对象的各个状态之间的转换过程如图所示:
下面通过例子来看一下对象的这几种状态。
1.复制工程Hibernate04命名为Hibernate05;
2.修改StudenTest.java文件为:
package com.test.service;import com.test.model.Class;import org.hibernate.Session;import org.hibernate.SessionFactory;import com.test.model.Student;import com.test.util.HibernateUtil;public class StudentTest {public static void main(String[] args) {SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); // 获取Session工厂Session session=sessionFactory.openSession(); // 生成一个session session.beginTransaction(); // 开启事务 Class c1 = new Class();//临时对象1 c1.setName("08数学"); Class c2 = new Class();//临时对象2 c2.setName("09数学"); session.save(c1);//持久化对象 session.save(c2);//持久化对象 session.getTransaction().commit(); // 提交事务 session.close(); // 关闭session System.out.println(c1.getName());//处于游离状态的对象}}
new出c1和c2时,这两个对象为临时状态。这两个状态会存储在内存中,状态如下:
调用session.save之后,对象c1和c2会保存到session缓存中,持久化后的c1和c2的存储状态为:
提交事务后c1和c2才会存储到数据库表中。关闭session后,对象c1和c2处于游离状态,此时它们还是能够取得到的。这时它们又会保存在内存中:
下面修改一下StudentTest.java文件为:
package com.test.service;import com.test.model.Class;import org.hibernate.Session;import org.hibernate.SessionFactory;import com.test.model.Student;import com.test.util.HibernateUtil;public class StudentTest {public static void main(String[] args) {SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); // 获取Session工厂Session session=sessionFactory.openSession(); // 生成一个session session.beginTransaction(); // 开启事务 Class c1 = new Class();//临时对象1 c1.setName("08数学"); Class c2 = new Class();//临时对象2 c2.setName("09数学"); session.save(c1);//持久化对象 session.save(c2);//持久化对象 session.delete(c2);//删除对象 session.getTransaction().commit(); // 提交事务 session.close(); // 关闭session System.out.println(c1.getName());//游离对象 System.out.println(c2.getName());//删除状对象}}
这里提交事务前c2成了游离对象,提交事务后c2在数据库表中会被删除。
由于函数还没有结束,此时c2也是能够取到的,此时c2也是保存在内存中。
- J2EE系列之Hibernate4学习笔记(六)--Hibernate中对象的4种状态
- J2EE系列之Hibernate4学习笔记(一)--Hibernate简介
- J2EE系列之Hibernate4学习笔记(十九)--hibernate高级配置(配置hibernate二级缓存)
- J2EE系列之Hibernate4学习笔记(十七)--hibernate高级配置(配置连接池)
- J2EE系列之Hibernate4学习笔记(十八)--hibernate高级配置(配置日志框架log4j)
- J2EE系列之Hibernate4学习笔记(八)--Hibernate基本类型映射
- J2EE系列之Hibernate4学习笔记(九)--Hibernate集合类型映射
- J2EE系列之Hibernate4学习笔记(十五)--hibernate检索策略
- J2EE系列之Hibernate4学习笔记(十六)--hibernate查询方式
- J2EE系列之Hibernate4学习笔记(三)--映射对象标识符(OID)
- J2EE系列之Hibernate4学习笔记(十三)-- -一对一映射
- J2EE系列之Hibernate4学习笔记(十)--Hibernate继承关系映射(每个具体类对应一个表)
- J2EE系列之Hibernate4学习笔记(十一)--Hibernate继承关系映射(根类对应一个表)
- J2EE系列之Hibernate4学习笔记(十二)--Hibernate继承关系映射(每个类对应一个表)
- J2EE系列之Hibernate4学习笔记(二)--Hibernate4增删改查体验
- J2EE系列之Struts2学习笔记(六)---struts2处理传入多个数目不定的JavaBean对象
- J2EE系列之SpringMVC学习笔记(六)--文件上传
- J2EE系列之MyBatis学习笔记(六)-- 动态sql
- 自动登录过BSO的脚本
- js 事件绑定on()的用法,以及对于其他绑定事件的比较
- The Balance (母函数)
- Jboss下使用spring配置实现JTA全局事务管理(下)
- spring的PreferencesPlaceholderConfigurer类对数据库密码进行加密
- J2EE系列之Hibernate4学习笔记(六)--Hibernate中对象的4种状态
- 美团面试
- MySQL
- 常见专业术语名词解释(持续更新)
- ('42000', '[42000] [FreeTDS][SQL Server]Unicode data in a Unicode-only collation or ntext data canno
- 设计模式(一)--单例模式
- 电子书
- 2017-5-11 C++primer笔记
- 3.6 JS日期函数 Date()