Hibernate学习笔记2--持久化对象的状态
2017-04-06 15:54
316 查看
1.分类
1.持久化对象的状态分为四种:临时状态,持久化状态,游离状态,删除状态。2。对比:
## | OID是否为空 | 是否处于session缓存中 | 数据库记录是否为空 |
临时状态 | null | N | null |
持久化状态 | not null | Y | not null |
游离状态 | not null | N | 当由持久化状态转化来时不为空 |
删除状态 | null | N | null(曾经有过) |
2.对象四种状态的转化
1.session.save()
使对象由临时状态变为持久化状态;为对象分配ID(主键生成方式为系统自动生成时);在flush(系统在执行hql或qbc语句时会先执行flush操作)
缓存时发送一条insert语句;save()前执行的setID方法无效;持久化后的对象的ID无法修改。
2.session.persist()
该方法和save方法相同会执行insert语句。区别是persist()的setID()会报错,而save()只是无效。
3.get()
执行select操作
4.load()
执行select操作
5.get()和load()的区别
1.get()查询会立即加载对象(立即检索),load()查询会返回一个代理对象,等到使用该对象时才会发送查询语句(延迟检索); 2.若数据表中没有对应的记录,get()返回null,load()产生异常。 3.load()可能会出现懒加载异常(在使用该对象前就关闭了session)。
6.update()
Update()方法会使一个对象从游离态变为持久态。如果用get方法取出对象后,set改变属性可以不用显示调用update方法(因为flush(且session没关闭))。
但如果关闭session后,重新开一个session则需要显示的调用update方法(缓存已经没了)。注意:如果一个对象处于游离状态,调用update方法一定会发送update语句,
但是如果处于持久态则数据有改变才会发送update语句。在update关联一个游离对象时,如果在session缓存中已经存在相同的OID持久化对象,会抛出异常。因为在缓存中不能存在两个相同的OID。
7.saveOrUpdate()
当对象处于临时状态时save(),当对象处于游离态时update()
8.delete()
执行删除操作,无论对象处于游离态还是持久态
9.evit()
从缓存中移除指定的持久化对象
3.注意
在设置持久化类的Date时,一般设置为java.util.date相关文章推荐
- Hibernate学习笔记 之 持久化对象的状态
- Hibernate学习笔记 - Hibernate中持久化对象的状态转换规则
- Hibernate的学习之路十(持久化对象的三个状态)
- Hibernate学习笔记---1.java对象持久化技术
- Hibernate的学习之路十(持久化对象的三个状态)
- Hibernate学习-11:持久化对象状态及状态转换、持久态对象自动更新数据库
- Hibernate的学习之路十(持久化对象的三个状态)
- Hibernate框架学习(第四讲)---持久化对象状态
- Hibernate的学习之路十(持久化对象的三个状态)
- Hibernate的学习之路十(持久化对象的三个状态)
- 深入学习Hibernate4_05hibernate中对象的四种状态(临时状态,持久化状态,游离状态,删除状态),以及常用方法的介绍
- Hibernate的学习之路十(持久化对象的三个状态)
- [原创]java WEB学习笔记79:Hibernate学习之路--- 四种对象的状态,session核心方法:save()方法,persist()方法,get() 和 load() 方法,update()方法,saveOrUpdate() 方法,merge() 方法,delete() 方法,evict(),hibernate 调用存储过程,hibernate 与 触发器协同工作
- Hibernate的学习之路十(持久化对象的三个状态)
- Hibernate学习笔记 -- day05 缓存、快照机制、对象状态
- 深入学习Hibernate持久化对象的三个状态
- Hibernate学习笔记(四)----核心开发接口、对象的三种状态、session常用方法
- 【Hibernate学习】——持久化对象的三种状态
- Hibernate的学习之路十(持久化对象的三个状态)