Hibernate持久化对象的状态及session的基本应用
2016-10-31 14:52
465 查看
站在持久化对象的角度,Hibernate吧对象分为4种状态:1:持久化状态,2:游离状态,3:临时状态,4:删除状态。值得提醒的是Session的特定方法能使对象从一个状态转到另一种状态。好,我们分别对这四种状态进行简略的解释。
为了简单清除明了,我画了一张图供大家参考
1:持久化状态:OID不为空,该对象在Session缓存中,持久化对象和数据库中的相关记录想对应。注意:在同一个Session缓存中,数据库表中的记录只对应一个持久化对象, 否则将会抛出异常!
2:临时状态:OID为空,该对象不在Session缓存中,在数据库中没有对应的记录。
3:游离状态:OID不为空,该对象不在Session缓存中,一般情况下,游离状态是持久化状态转变过来的,所以数据库中可能有与之相关的记录。
4:删除状态:在数据库中没有与其OID对应的记录,该对象也不在Session缓存中。
4种对象我们交代清楚了之后,我们在来看一下有哪几个Session特定的方法可以把对象从一个状态转变为另一种状态。
One by one
Session的save()方法使一个临时对象转变为一个持久化对象:
save()方法会完成以下操作:
1:把对象加入到Session缓存中去。
2:选用映射文件标识符生成器为持久化对象分配唯一的OID,是其成为持久化对象。
3:立即执行一条insert语句
如图:
执行结果为:
Session的get()和load()方法:
get和load方法都是从数据表中提取一条记录,但两者有显著地区别:
1:执行get() 方法会立即加载对象,若执行load()方法若不使用该对象,则不会立即做查询操作,而是返回一个对象的代理。
2:若数据库中没有相关的记录,get()方法会返回null,load()方法会抛异常org.hibernate.ObjectNotFoundException。
Session的update()方法:
update()方法使一个游离的对象转变为持久化对象,并计划执行一条update语句
注意事项:
若希望Session仅当修改了News对象的属性是才执行Update语句,可以把映射文件中的class元素的select-before-update 设为true,但通常不需要折磨做。
当update()方法关联一个游离对象时,如果Session的缓存中有相同OID的对象,则会抛出异常。
如图:
当update()方法关联的游离态的对象在数据库中没有相应的记录,则会抛异常。
如图:
saveOrUpdate()方法:
该方法会判断该对象是游离对象还是临时对象,从而调用不同的方法。
判断标准:对象的OID是不是为空。
如图测试结果:
结果为:
Session的delete()方法:可以删除一个游离对象,也可以删除一个持久化对象。
session的delete()方法的处理过程:
1:计划执行一条SQL语句。
2:把对象从session缓存中删除,该对象进入删除状态。
如图:
游离对象的操作:
持久化状态:
Hibernate 的cfg.xml 配置文件中有一个hibernate.use_identifier_rollback 属性若把它设为true将改变delete的运行过程,delete方法会把持久化对象或游离对象的OID设为null,使他们变为临时对象。
为了简单清除明了,我画了一张图供大家参考
1:持久化状态:OID不为空,该对象在Session缓存中,持久化对象和数据库中的相关记录想对应。注意:在同一个Session缓存中,数据库表中的记录只对应一个持久化对象, 否则将会抛出异常!
2:临时状态:OID为空,该对象不在Session缓存中,在数据库中没有对应的记录。
3:游离状态:OID不为空,该对象不在Session缓存中,一般情况下,游离状态是持久化状态转变过来的,所以数据库中可能有与之相关的记录。
4:删除状态:在数据库中没有与其OID对应的记录,该对象也不在Session缓存中。
4种对象我们交代清楚了之后,我们在来看一下有哪几个Session特定的方法可以把对象从一个状态转变为另一种状态。
One by one
Session的save()方法使一个临时对象转变为一个持久化对象:
save()方法会完成以下操作:
1:把对象加入到Session缓存中去。
2:选用映射文件标识符生成器为持久化对象分配唯一的OID,是其成为持久化对象。
3:立即执行一条insert语句
如图:
执行结果为:
Session的get()和load()方法:
get和load方法都是从数据表中提取一条记录,但两者有显著地区别:
1:执行get() 方法会立即加载对象,若执行load()方法若不使用该对象,则不会立即做查询操作,而是返回一个对象的代理。
2:若数据库中没有相关的记录,get()方法会返回null,load()方法会抛异常org.hibernate.ObjectNotFoundException。
Session的update()方法:
update()方法使一个游离的对象转变为持久化对象,并计划执行一条update语句
注意事项:
若希望Session仅当修改了News对象的属性是才执行Update语句,可以把映射文件中的class元素的select-before-update 设为true,但通常不需要折磨做。
当update()方法关联一个游离对象时,如果Session的缓存中有相同OID的对象,则会抛出异常。
如图:
当update()方法关联的游离态的对象在数据库中没有相应的记录,则会抛异常。
如图:
saveOrUpdate()方法:
该方法会判断该对象是游离对象还是临时对象,从而调用不同的方法。
判断标准:对象的OID是不是为空。
如图测试结果:
结果为:
Session的delete()方法:可以删除一个游离对象,也可以删除一个持久化对象。
session的delete()方法的处理过程:
1:计划执行一条SQL语句。
2:把对象从session缓存中删除,该对象进入删除状态。
如图:
游离对象的操作:
持久化状态:
Hibernate 的cfg.xml 配置文件中有一个hibernate.use_identifier_rollback 属性若把它设为true将改变delete的运行过程,delete方法会把持久化对象或游离对象的OID设为null,使他们变为临时对象。
相关文章推荐
- hibernate 一级缓存(Session缓存)和持久化对象的四种状态
- 新手上路之Hibernate(三):持久化对象三种状态以及session的Get()与Load()区别
- Hibernate之Session对象的相关方法以及持久化对象的状态
- Hibernate之Session对象的相关方法以及持久化对象的状态
- 5 -- Hibernate的基本用法 --5 2 持久化对象的状态
- Hibernate持久化对象状态 Session缓存(一级缓存),快照 操纵持久化对象的方法
- Hibernate,Session方法使得java对象进入持久化状态;持久化对象特征
- Hibernate持久化对象的三种状态 .
- Hibernate持久化对象的三种状态
- hibernate常用的接口和类的方法以及持久化对象的状态变化
- Hibernate入门BLOG [三、session的常用方法和hibernate对象的3种状态]
- hibernate常用的接口和持久化对象的状态变化
- Hibernate持久化对象的三种状态
- Java程序员从笨鸟到菜鸟之(六十二)细谈Hibernate(十三)session缓存机制和三种对象状态
- 持久化模式,第 1 部分: 现代 ORM 工具的策略和最佳实践,使用 Hibernate 特性在领域模型上应用面向对象原则
- 【Hibernate框架开发之五】Hibernate对象的三种状态&&Session的常用方法
- Hibernate持久化对象三种状态的区分,以及save,update,saveOrUpdate,merge,persist等的使用
- Hibernate学习(三):Session的缓存及对象的状态
- Hibernate持久化对象的三种状态
- Hibernate3---持久化对象的状态