Hibernate对象状态转化
2016-04-30 17:22
387 查看
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,完成数据持久化的重任。包括五个核心接口,Hibernat通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制。
Session接口负责执行被持久化对象的CRUD操作,在hibernate 中使用最为广泛,是持久化操作的核心。session的生命周期存在于transaction中,Hibernate中数据库连接最终包装成Session对象, 使用Session对象可以对数据库进行操作。
Session的创建
对象在生命周期中有三种状态,transient(瞬时状态),persistent(持久化状态)以及detached(离线状态),临时状态(Transient):用new创建的对象,它没有持久化,没有处于Session中,处于此状态的对象叫临时对象;持久化状态(Persistent):已经持久化,加入到了Session缓存中。如通过hibernate语句保存的对象。处于此状态的对象叫持久对象;游离状态(Detached):持久化对象脱离了Session的对象。如Session缓存被清空的对象。特点:已经持久化,但不在Session缓存中。处于此状态的对象叫游离对象。
瞬时态(Transient)
由new操作符创建,尚未与Hibernate Session关联的对象被认定为瞬时(Transient)的。瞬时(Transient)对象没有被存入任何数据表中,也不会被持久化到数据库中,一旦不被其他对象引用,他们的状态立即消失。
瞬时态对象创建
瞬时状态的特点有:
1、 与数据库中的记录没有任何关联,也就是没有与其相关联的数据库记录。
2、 与Session没有任何关系,也就是没有通过Session对象的实例对其进行任何持久化的操作。
持久态(Persistent)
持久化状态(Persistent):与session关联并且在数据库中有相应数据。已经持久化,加入到了Session缓存中。如通过hibernate语句保存的对象。处于此状态的对象叫持久对象。
瞬时态转化持久态
持久对象特点:
1. 和session实例关联;
2. 在数据库中有与之关联的记录。
Hibernate三种状态之三:游离状态(Detached):持久化对象脱离了Session的对象。如Session缓存被清空的对象。特点:已经持久化,但不在Session缓存中。处于此状态的对象叫游离对象,即当持久态欧对象不再与session关联时,则变为游离状态。
游离态对象特点:
游离态对象不再与session实例关联。
游离态对象属性值的改变不会同步到数据库。
三态之间的转换方法:
对象通过构造方法成为自由态;持久态和游离态则通过session的delete方法成为自由态.
对象可以由session的load或get方法直接成为持久态;自由态对象可以通过save,saveOrUpdate或persist方法成为持久态;游离态对象则可以通过update,saveOrUpdate成为持久态.
游离态只能由持久态转换而来,通过close或clear方法实现。
Session接口负责执行被持久化对象的CRUD操作,在hibernate 中使用最为广泛,是持久化操作的核心。session的生命周期存在于transaction中,Hibernate中数据库连接最终包装成Session对象, 使用Session对象可以对数据库进行操作。
Session的创建
Configuration config = new Configuration().configure(); SessionFactory sessions = config.buildSessionFactory();
对象在生命周期中有三种状态,transient(瞬时状态),persistent(持久化状态)以及detached(离线状态),临时状态(Transient):用new创建的对象,它没有持久化,没有处于Session中,处于此状态的对象叫临时对象;持久化状态(Persistent):已经持久化,加入到了Session缓存中。如通过hibernate语句保存的对象。处于此状态的对象叫持久对象;游离状态(Detached):持久化对象脱离了Session的对象。如Session缓存被清空的对象。特点:已经持久化,但不在Session缓存中。处于此状态的对象叫游离对象。
瞬时态(Transient)
由new操作符创建,尚未与Hibernate Session关联的对象被认定为瞬时(Transient)的。瞬时(Transient)对象没有被存入任何数据表中,也不会被持久化到数据库中,一旦不被其他对象引用,他们的状态立即消失。
瞬时态对象创建
User user - new User(); user.SetName("Tom"); user.SetSex("Man");
瞬时状态的特点有:
1、 与数据库中的记录没有任何关联,也就是没有与其相关联的数据库记录。
2、 与Session没有任何关系,也就是没有通过Session对象的实例对其进行任何持久化的操作。
持久态(Persistent)
持久化状态(Persistent):与session关联并且在数据库中有相应数据。已经持久化,加入到了Session缓存中。如通过hibernate语句保存的对象。处于此状态的对象叫持久对象。
瞬时态转化持久态
User user - new User(); user.SetName("Tom"); user.SetSex("Man");
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransation();
session.save(user); //user处于持久化状态
transaction.commit();
session.close();
持久对象特点:
1. 和session实例关联;
2. 在数据库中有与之关联的记录。
Hibernate三种状态之三:游离状态(Detached):持久化对象脱离了Session的对象。如Session缓存被清空的对象。特点:已经持久化,但不在Session缓存中。处于此状态的对象叫游离对象,即当持久态欧对象不再与session关联时,则变为游离状态。
User user - new User(); user.SetName("Tom"); user.SetSex("Man");
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransation();
session.save(user);
transaction.commit();
session.close(); //关闭session后,user处于游离状态
游离态对象特点:
游离态对象不再与session实例关联。
游离态对象属性值的改变不会同步到数据库。
三态之间的转换方法:
对象通过构造方法成为自由态;持久态和游离态则通过session的delete方法成为自由态.
对象可以由session的load或get方法直接成为持久态;自由态对象可以通过save,saveOrUpdate或persist方法成为持久态;游离态对象则可以通过update,saveOrUpdate成为持久态.
游离态只能由持久态转换而来,通过close或clear方法实现。
相关文章推荐
- each-Select
- 8.多表查询-外连接
- 讲义二 第一个HelloWorld
- 动态规划(dynamic programming)原理
- 1033. 旧键盘打字(20)
- 228. Summary Ranges
- java位运算符
- 随想 (附一个算法)
- linux上修改时间
- 新媒体时代标题党的速成秘技19条
- 1032. 挖掘机技术哪家强(20)
- for循环,增强型for循环,迭代(从前往后,从后往前)
- google-perftools简明使用
- 学习进度条——第九周
- Docker在LXC基础上做了什么 && Docker与虚拟机之间有什么不同
- poj1179(区间dp)
- Linux系统分类
- poj 1953 World Cup Noise
- C++学习笔记60——模板编译模型
- c中malloc的用法