您的位置:首页 > 数据库

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,使他们变为临时对象。




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐