现在的位置: 首页 > 综合 > 正文

《精通Hibernate》学习(6)——通过Hibernate操纵对象(上)

2013年06月14日 ⁄ 综合 ⁄ 共 1042字 ⁄ 字号 评论关闭

一、Java对象在JVM中的生命周期

当应用程序通过new语句创建一个Java对象时,JVM会为这个对象分配一个内存空间,只要这个对象被引用变量引用,它就一直处在内存中。但是如果这个对象不被任何引用变量引用,它就结束生命周期,此时JVM的垃圾回收器会在适当的时候回收它占用的内存。

 

二、理解Session的缓存

如果希望一个Java对象A一直处于生命周期中,就必须保证至少有一个对象保持对它的引用或者可以从其他处于生命周期中的对象B导航到这个对象A,比如在对象B的Java组合中存放了对象A的引用。在Session接口的实现中包含一系列的Java集合,这些Java集合构成了Session缓存。如下图所示:

 

当Session的save()方法持久化一个Customer对象时,Customer对象就被加入到Session缓存中,以后即使不被调用,只要Session缓存没有清空,Customer对象就仍然处在生命周期。

当Session的get()方法试图从数据库中加载一个Customer对象时,Session先判断缓存中是否已经存在这个Customer对象,如果存在,就不需要再到数据库中检索,而直接存缓存中获得这个Customer对象。

 Session缓存的三大作用

(1)减少访问数据库的频率;

(2)当缓存中的持久化对象之间存在循环关联关系时,Session会保证不会出现访问对象图的死循环以及由死循环引起的JVM堆栈溢出异常;

(3)保证数据库中的相关记录与缓存中的相应对象保持同步。

 脏检查以及清理缓存的机制

 当一个Customer对象被加入到Session中时,Session会为其做一个快照。当Session执行清理缓存时,它会将Customer当前属性和快照进行比较,如果发生变化,就称这个对象为“脏对象”,Session会根据对象的最新属性来执行相关的SQL语句,从而同步更新数据库。这即是Session缓存三大作用の第三个。

当Session缓存中对象的属性发生变化时,Session并不会立即清理缓存执行相关SQL语句,而是在特定的时间点才会清理缓存,这使得Session能够把几条相关的SQL语句合并成一条SQL语句,以便减少访问数据库的次数,从而提高性能。

 

 

 

三、Java对象在Hibernate持久化层的状态

 

 

四、Session接口的详细用法

见:http://blog.csdn.net/yu422560654/article/details/7007978

抱歉!评论已关闭.