Hibernate面试题部分汇总集合(3)
时间:2025-02-28
时间:2025-02-28
此文档主要简绍J2EE中的hibernate面试突击问题部分集合
Session为应用程序提供了两个管理缓存的方法:
1>.Evict(Object obj):从缓存中清除参数指定的持久化对象;
2>.Clear():清空缓存中所有持久化对象。
二级缓存的管理:
Hibernate的二级缓存策略的一般过程如下:
1) 条件查询的时候,总是发出一条select * from table_name where …. (选择 所有字段)这样的SQL语句查询数据库,一次获得所有的数据对象。
2) 把获得的所有数据对象根据ID放入到第二级缓存中。
3) 当Hibernate根据ID访问数据对象的时候,首先从Session一级缓存中查; 查不到,如果配置了二级缓存,那么从二级缓存中查;查不到,再查询数据库,把结果按照ID放入到缓存。
4) 删除、更新、增加数据的时候,同时更新缓存。此外,Hibernate的二级缓存策略,只是针对于ID查询的缓存策略,对于条件查询则毫无作用。为此,
Hibernate提供了针对条件查询的Query Cache(查询缓存)。
常用的缓存插件:
Hibernate的二级缓存是一个插件,下面是几种常用的缓存插件:
· EhCache:可作为进程范围的缓存,存放数据的物理介质可以是内存或硬 盘,对Hibernate的查询缓存提供了支持。
· OSCache:可作为进程范围的缓存,存放数据的物理介质可以是内存或硬 盘,提供了丰富的缓存数据过期策略,对Hibernate的查询缓存提供了支持。 · SwarmCache:可作为群集范围内的缓存,但不支持Hibernate的查询缓存。 · JBossCache:可作为群集范围内的缓存,支持事务型并发访问策略,对Hibernate的查询缓存提供了支持。
5.Hibernate是如何实现延迟加载的?
Hibernate对象关系映射提供延迟的与非延迟的对象初始化。
非延迟加载在读取一个对象的时候会将与这个对象所有相关的其他对象一
起读取出来。这有时会导致成百select语句在读取对象的时候执行。这个问题有时出现在使用双向关系的时候,经常会导致整个数据库都在初始化的阶段被读 出来了。
一个明显的解决方法是使用Hibernate提供的延迟加载机制。这种初始化策
略只在一个对象调用它的一对多或多对多关系时才将关系对象读取出来。这个过程对开发者来说是透明的,而且只进行了很少的数据库操作请求,因此会得到比