Hibernate总结——Session_1

作者:李东龙

       上一篇Hibernate数据持久化博客中提到的几个状态,而我们之前使用JDBC对数据进行持久化时,并没有出现这些状态。那首先就要看看是谁来控制着它们的存在和变化的?

       HibernateJDBC进行封装,通过Session对数据的持久化操作进行管理。正因为有了Session的介入,才出现了临时、持久化、离线这三种的状态,当然这三种状态也都是对于Session来说的。

       在使用JDBC时,数据都是有JVM进行控制的,而持久化的操作是有JDBC完成。如下图所示:

       先来看一下,Java对象在JVM中的生命周期:创建一个Java对象时,JVM会为这个对象分配一个内存空间,只要这个对象被引用变量引用,就一直存在于内存中,如果一个对象不被任何引用变量引用,就结束生命周期。Java集合(ListMapSet)存放的是Java对象的引用,当向集合中添加一个对象时,其实是把这个对象的引用添加到集合中。因此集合中含有的对象生命周期一直存在。

       在上述的描述中,java对象的生命周期和入不入库一点关系都没有。只要对象在程序中不再使用,就很快会被垃圾回收机制回收。

       而当引入Hibernate之后,通过Session对对象进行管理之后,该过程发生了很大的变化。

       首先临时状态,这样的状态是和之前不采用Hibernate时候是相同的,但这个时候是不能做数据库操作的(当然也不是完全不可以,如果非要做的话那就之后绕过Hibernate了)。

       然后持久化状态说的是Session接管了JVMjava对象的管理(也可以说是在他们之间又加了一层)。所以被Session管理之后的对象,只要管理他的这个Session没有关闭,那么这个对象就是存在的。如下图所示:


       当然在这个封装java对象之后呢,Session还提供了JDBC的操作。所以就有了Session的一些操作能够控制,Session和数据库中的数据的同步操作了。

       最后就是离线状态了,什么时候Session关闭,Session对该对象的“引用”不存在了(垃圾回收机制就会回收该数据),并且已经存入数据的数据对象就处于是离线状态。

基本的Session概念大概就这样分析一下,Hibernate通过Session来管理这些java对象。

                                           

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值