Configuration这个对象相当于代表了一个Hibernate的配置文件;
ServiceRegistry相当于Hibernate4的一个新的接口,所有的基于Hibernate的配置或者服务都必须向这个接口进行注册才可以使用;
SessionFactory相当于一个和单个数据库建立连接的映射的镜像,用来创建Session对象;
Transaction是HIbernate进行数据库操作之前必须要开启的事务对象,若不开启则操作数据库的内容是失败的
① Session接口数Hibernate提供的操作数据库的最主要的接口,这个接口中有一系列更新,删除,保存和加载(根据唯一的UID将数据记录转换为对象到内存中)的方法。
② Seesion的对象具有一个一级的缓存,位于一级缓存中的对象称之为持久化的对象(这些对象和数据库中的一些记录一一对应)。Session可以在某些时间点按照缓存中对象的变化来执行相关的SQL语句,来同步更新数据库,这一个过程称之为刷新缓存(fluseh()方法)。
③站在持久化的角度,Hibernate把对象分为4种状态:持久化状态,临时状态,游离状态,删除状态。Session的特定方法能使对象从一个状态转换到另外一个状态。
2.Session缓存
① Session接口的实现类中包含一系列的Java的集合,这些Java的集合构成了Session缓存,只要Session的实例还没有结束生命周期,且没有清理缓存,那么这个Session对象中的缓存中的对象也不会结束生命周期,哪怕没有任何变量引用这些位于缓存中的持久化的对象。
② Session缓存的功能
Session缓存可以有效的减少HIbernate应用程序访问数据库的频率。因为它可以从缓存中拿取数据,而不必再从数据库中拿取数据。
③ Session实例对象的方法
flush:Session按照缓存中对象的属性变化来同步更新数据库
默认情况下Session在以下时间点刷新缓存:
ServiceRegistry相当于Hibernate4的一个新的接口,所有的基于Hibernate的配置或者服务都必须向这个接口进行注册才可以使用;
SessionFactory相当于一个和单个数据库建立连接的映射的镜像,用来创建Session对象;
Transaction是HIbernate进行数据库操作之前必须要开启的事务对象,若不开启则操作数据库的内容是失败的
本节内容:Session这个对象及其具有的缓存的功能
① Session接口数Hibernate提供的操作数据库的最主要的接口,这个接口中有一系列更新,删除,保存和加载(根据唯一的UID将数据记录转换为对象到内存中)的方法。
② Seesion的对象具有一个一级的缓存,位于一级缓存中的对象称之为持久化的对象(这些对象和数据库中的一些记录一一对应)。Session可以在某些时间点按照缓存中对象的变化来执行相关的SQL语句,来同步更新数据库,这一个过程称之为刷新缓存(fluseh()方法)。
③站在持久化的角度,Hibernate把对象分为4种状态:持久化状态,临时状态,游离状态,删除状态。Session的特定方法能使对象从一个状态转换到另外一个状态。
2.Session缓存
① Session接口的实现类中包含一系列的Java的集合,这些Java的集合构成了Session缓存,只要Session的实例还没有结束生命周期,且没有清理缓存,那么这个Session对象中的缓存中的对象也不会结束生命周期,哪怕没有任何变量引用这些位于缓存中的持久化的对象。
② Session缓存的功能
Session缓存可以有效的减少HIbernate应用程序访问数据库的频率。因为它可以从缓存中拿取数据,而不必再从数据库中拿取数据。
③ Session实例对象的方法
flush:Session按照缓存中对象的属性变化来同步更新数据库
默认情况下Session在以下时间点刷新缓存:
- 显示调用Session的flush()方法
- 当应用程序调用Transaction()的commit()方法的时候,该方法先flush,然后再向数据库提交事务。
- 当应用程序执行一些查询(HQL,Criteria)操作时,如果缓存中持久化对象的属性已经发生了变化,会先flush缓存,以保证查询结构能够反映持久化对象的最新状态
commit()和flush()方法的区别:flush执行一系列sql语句,但不提交事务;commit方法先调用flush()方法,然后提交事务,意味着提交事务对数据库永久保存下来。
4.refresh();这个方法会强制性的发出查询(select)语句使得Session缓存中的对象和数据库中的记录保持一致。
需要注意的是,使用这个方法前必须查看数据库针对事务的隔离级别是什么,我们必选将数据库的隔离级别设置成读已提交的即2--read_commited才可以使refresh()方法生效。MySql默认数据库隔离级别是repeatable_read(可重复读),Oracle数据库的默认隔离级别是read_commited。详情见3.1
设置:
5.clear():顾名思义,就是清除Session实例中的缓存对象。