hibernate持久化 什黱是持久化

1、HIBERNATE 中持久化类实例的三种状态

1.1 临时状态

特征:

a.不存在于session实例的缓存中,不与任何session实例相关联

b.在数据库中没有民之相对应的记录

促使持久化类实例进入临时状态的情况如下:

a.通过new语句创建新的持久化类实例。

b.通过执行delete()方法删除持久化类实例。

1.2 持久化状态

特征:

a.存在于session实例的缓存中,与session实例相关联。

b.在数据库中有与这相对应的记录。

c.session实例在清理缓存时会根据持久化类实例属性的变化更新数据库。

促使持久化类实例进入持久化状态的情况如下:

a.通过执行save()或saveOrUpdate()方法使临时对象转变为持久化对象。

b.通过执行update()或saveOrUdate()方法使游离对象转变为持久化对象。

c.通过执行load()或get()方法返回的持久化实例都是持久化类对象。

d.通过执行find()方法返回的list集合中的持久化实例都是持久化类对象。

e.在允许级联保存的情况下,session实例在清理缓存时会把与持久化对象关联的临时对象转变为持久化对象。

1.3 游离状态

特征:

a.不存在于session实例的缓存中,不与任何session实例相关联

b.在数据库中有与之相对应的记录(前提条件是没有其他session实例删除该记录).

促使持久化类实例进入临时状态的情况如下:

a.通过执行evict()方法,可以从session实例的缓存中删除一个持久化类实例,使之转变为游离对象。

b.通过执行clear()方法,可以清空session实例的缓存,使缓存中的所有持久化类实例转变为游离状态

c.通过执行close()方法,可以销毁session实例,从而清空session实例的缓存。

2、三种状态之间的转换

代码

对象的生命周期状态

对象的状态

Users users=new Users();

开始生命周期

开始生命周期

Session session=sessionFactory.openSessin();

Transaction tx=session.beginTransaction();

在生命周期中

临时状态

Session.save(users);

在生命周期中

转变为持久化状态

Tx.commit();

在生命周期中

持久化状态

Session.close();

在生命周期中

转变为游离状态

System.out.println(users.getName());

在生命周期中

游离状态

Users=null;

结束生命周期

结束生命周期

save()方法:

* 1.应尽量在调用save()方法之前完成对持久化类实例的修改,如果已经通过save方法对持久化类实例进行了持久化 操作,再修改持久化类实例,在提交事务时将多执行一条update语句,影响运行速度。

* 2.坚决避免重持久化同一持久化类实例。

Update()方法:

*1.当通过update方法将游离对象转变为持久化对象之后,并对持久化对象做了修改,在这种情况下并不需要调用save或update方法

*2.如果在一次事务中对持久化对象做了多次修改,hibernate同样只生成一条update语句。

*3.通过update方法将一个持久化类实例从游离状态转变为了持久化状态,但并未对该持久化对象做任何修改,在默认情况下,同样会在关闭session实例时执行一条update语句,、

*可以通过修改配置文件将:select-befor-update属性设为true,默认为false,当设为true时,会在执行update语句之前执行一条select语句,判断持久化对象与数据库

* 当中的记录是否一致如果一致则不执行update,否则执行,

*建议:对于很少发生改变的持久化类可以采用这种配置,因为执行select语句的效率要比执行update语句的效率高,对于常发生改变的类,建议不要采用这种配置,那样每次都会多执行一条语句。

delect()方法

*1.通过此方法可以删除持久化类实例(可以是持久化对象,也可以是游离状态)

hibernate持久化 什黱是持久化

* 2.批量删除时可用如下代码:

Query query=session.createQuery("delete from Users");

query.executeUpdate();//只执行一条删除语句

get()方法

1.当通过此方法加载指定的持久化实例时,如果在数据库中存在相应的记录,则返回持久化类实例,不存在则返回null

2.当存在的时候总是立即返回,即使是在映射文件中设置该类采用延迟检索策略

3.当通过此方法加载指定的持久化类实例时,hibernate首先会检索当前session实例的缓存,如果存在,则直接返回该持久化类实例的引用,否则继续检索二级缓存(前提条件是引入了二级缓存),最后在缓存中检索不到的情况下才执行select语句,从数据库检索。

4.通过此方法加载得到的持久化类实例便位于session实例的缓存中,也可以理解为通过此方法可以将指定的持久化了的实例加载到当前session实例的缓存中,在这种情况下,如果对持久化类实例做了修改,并不需要执行save方法修改。

  

爱华网本文地址 » http://www.aihuau.com/a/25101016/316273.html

更多阅读

真神 为什么说上帝是真神

第一篇 真神是靈“神是個靈;所以拜祂的,必須用心靈和誠實拜祂。”(約4:24)神是靈,“靈”是無形體可見,很難說明的。所以世人不由啟示默化,就不能認識神。比方一個兒童,自幼就迷失在深山之中,及長,雖知識略增,尋求服事神,但他所服事的不能恰合正

评纳什均衡 纯策略纳什均衡

评纳什均衡纳什均衡是20世纪80年代才被广泛使用的一个概念,是非合作博弈理论中最基本的均衡概念。纳什均衡的存在性在经过纳什(1950)的证明以后,就成为博弈论一个重要的研究方向。纳什的工作是对Von Neumann和Morgenstern(1944)的冲

什么是爱 什么是爱的感觉

什 么 是爱——就《爱是需要学习的》一书出版答中国商报记者郑立华1、“问世间情为何物,直教生死相许”。关于爱,人都经历过,可是恐怕都很难说明白,那么,您觉得,爱——主要是男女之爱——究竟是什么呢?答:经过我的一些研究和提炼,支配爱的因

转载 夜曲·周杰伦——钢琴谱 周杰伦夜曲钢琴谱简谱

琴谱原文地址:夜曲·周杰伦——钢琴谱作者:天使注意:倘若想要完整地看完此谱,请用阅读模式,谢谢!此琴谱为图片模式。夜曲·JayChow一群嗜血的蚂蚁被腐肉所吸引我面无表情看孤独的风景失去你爱恨开始分明失去你还有什黱事好关心当鸽子不再

声明:《hibernate持久化 什黱是持久化》为网友璀璨的惆怅分享!如侵犯到您的合法权益请联系我们删除