Hibernate框架(二)

来源:互联网 发布:磊科 网络尖兵配置 编辑:程序博客网 时间:2024/06/05 04:41


实体对象的生命周期

实体对象是指Hibernate的OR映射关系的域对象(即OR中的O)

实体对象的生命周期指的是实体对象由产生到被GC回收的一段过程,在这段

过程中我们需要理解的是实体对象生命周期的三种状态


实体对象的三种状态

自由状态:实体对象在内存中自由存在 ,与数据库无关

不存在于Session的缓存中,不被任何一个Session实例关联

在数据库中没有对应的记录


持久状态:实体对象处于Hibernate管理下的状态,实体对象的引用被纳入到Hibernate实体容器中加以管理,

此时实体会被Hibernate固化在数据库当中,如当session调用save方法的时候,就会将对象纳入到Hibernate的管理当中

事务提交的时候就会将这个对象固化到了数据库当中,此时的实体对象的状态就是持久状态

当Session调用load方法的时候,就是将一个实体对象由Hibernate加载

简单的说,如果一个实体对象和某个Session实例发生了关联且处于这有效期内


位于一个Session实例的缓存中,持久化对象总被一个Session实例关联

持久化对象和数据库中的相关记录对应

Session在清理缓存时,会根据持久化对象的属性变化来更新数据库

Session的save方法可以把实体对象由自由状态从自由状态换为持久状态

Session的load方法或get方法可以返回持久状态的实体

Session的update,saveOrUpdate和lock方法使实体对象从游离状态变为持久状态


游离状态

持久对象对应的Session关闭以后,这个实体对象就处于了游离状态

实际上Session对象是实体对象在持久化状态的宿主

宿主失效的时候,转化为游离状态


不再位于Session的缓存中,游离状态的实体对象不被Session关联

游离状态是由持久化对象转变过来的,因此在数据库中可能还有它所对应的记录


状态转化





VO和PO的区别



Session接口

作用

Session接口提供了基本的保存,更新,删除和加载Java对象的方法


清理缓存

Session能够在某些时间点,按照缓存的对象的变化来执行相关的SQL语句,

来同步更新数据库,这一过程被称为清理缓存


Session管理

ThreadLocal模式的解决方案

ThreadLocal



模式示例如下,主要是因为有多线程存在,才采用此方法


使用后可以解决线程安全的问题


openSession和getCurrentSession之间的区别



使用getCurentSession的使用方法



Session save

 

persist


 update



saveOrUpdate()



load() get()

 

delete

 

 

 


原创粉丝点击