读书人

温习 - Hibernate的持久化环境

发布时间: 2012-09-04 14:19:30 作者: rapoo

复习 - Hibernate的持久化环境

Hibernate的持久化环境

?

很久没有使用Hibernate了,现在要复习一下, 面试的话这个是必不可少的.

?

1.Hibernate Session.

session的概念大概是这样:

(1). Session是一块内存,里面存放了Persistent状态的对象, 也就是Persistent Context(持久化环境)

(2). Session里面有一组排着队等着执行的Sql,这些sql的目的本质上都是为了确保缓冲区(session级别的缓存,一级缓存)的内容和数据库保持一致.

?

关于Persistent Context,注意几点:

(1). 就是存放对象的一块缓存

(2). 你不能通过相关的API来访问它(它就是隐藏在背后的一个神秘人物)

(3). 很明显,一个Hibernate Session对应一个Persistent Context

(4). 对应的是一级缓存,不是可选的,是必须的,而且不能disable.

?

除了效率的提高(缓存), 缓存还可以给我们带来另外的好处:

(1) 自动脏数据检查.

来个例子:

?

延迟写入的好处:

(1) 可以减少数据库的负担,不会造成频繁的写数据库,当然也可以间接的提高并发性.

(2) 可以减少数据在网络上传输的开销.

?

但是也不是什么情况下都等到commit才会一股脑的将所有sql送给数据库去执行.比如说在中途要执行查询操作,这时Hibernate就会把之前的SQL送给数据库去执行了.因为要保证查询到的数据时最新的.

(关于这个问题,我不能试验出来啊,奇怪,看来书上说的还是有点不对,我使用的版本是Hibernate 3.2.0.ga)

在上述例子save student2之后调用:

?

List students = anotherSession.createSQLQuery("select * from student").list();

?

?但是产生的统计信息没有变化. 这表示在发出查询操作后并没有把之前的sql交给数据库去处理.

?

关于Persistent Context的基本概念,就先到这啦.

?

?

?

?

?

?

?

?

?

?

?

读书人网 >软件架构设计

热点推荐