关于Hibernate缓存说法错误的是()。

题目
多选题
关于Hibernate缓存说法错误的是()。
A

Hibernate缓存一般分为三类:一级缓存、二级缓存和查询缓存

B

Session的evict()方法用于从缓存中清除指定的持久化对象

C

Session的clear()方法用于刷新缓存

D

Session的flush()方法用于从缓存中清除所有持久化对象

如果没有搜索结果或未解决您的问题,请直接 联系老师 获取答案。
相似问题和答案

第1题:

介绍一下Hibernate的二级缓存


正确答案:

 

按照以下思路来回答:(1)首先说清楚什么是缓存,(2)再说有了hibernate 的Session 就是

一级缓存,即有了一级缓存,为什么还要有二级缓存,(3)最后再说如何配置Hibernate 的

二级缓存。

(1)缓存就是把以前从数据库中查询出来和使用过的对象保存在内存中(一个数据结构中),

这个数据结构通常是或类似Hashmap,当以后要使用某个对象时,先查询缓存中是否有这个

对象,如果有则使用缓存中的对象,如果没有则去查询数据库,并将查询出来的对象保存在

缓存中,以便下次使用。下面是缓存的伪代码:

引出hibernate 的第二级缓存,用下面的伪代码分析了Cache 的实现原理

Dao

{

hashmap map = new map();

User getUser(integer id)

{

User user = map.get(id)

if(user == null)

{

user = session.get(id);

map.put(id,user);

}

return user;

}

}

Dao

{

Cache cache = null

setCache(Cache cache)

{

this.cache = cache

}

User getUser(int id)

{

if(cache!=null)

{

User user = cache.get(id);

if(user ==null)

{

user = session.get(id);

cache.put(id,user);

}

return user;

}

return session.get(id);

}

}

(2)Hibernate 的Session 就是一种缓存,我们通常将之称为Hibernate 的一级缓存,当想使

用session 从数据库中查询出一个对象时,Session 也是先从自己内部查看是否存在这个对象,

存在则直接返回,不存在才去访问数据库,并将查询的结果保存在自己内部。由于Session

代表一次会话过程,一个Session 与一个数据库连接相关连,所以Session 最好不要长时间

保持打开,通常仅用于一个事务当中,在事务结束时就应关闭。并且Session 是线程不安全

的,被多个线程共享时容易出现问题。通常只有那种全局意义上的缓存才是真正的缓存应用,

才有较大的缓存价值,因此,Hibernate 的Session 这一级缓存的缓存作用并不明显,应用价

值不大。Hibernate 的二级缓存就是要为Hibernate 配置一种全局缓存,让多个线程和多个事

务都可以共享这个缓存。我们希望的是一个人使用过,其他人也可以使用,session 没有这

种效果。

(3)二级缓存是独立于Hibernate 的软件部件,属于第三方的产品,多个厂商和组织都提供

有缓存产品,例如,EHCache 和OSCache 等等。在Hibernate 中使用二级缓存,首先就要在

hibernate.cfg.xml 配置文件中配置使用哪个厂家的缓存产品,接着需要配置该缓存产品自己

的配置文件,最后要配置Hibernate 中的哪些实体对象要纳入到二级缓存的管理中。明白了

二级缓存原理和有了这个思路后,很容易配置起Hibernate 的二级缓存。扩展知识:一个

SessionFactory 可以关联一个二级缓存,也即一个二级缓存只能负责缓存一个数据库中的数

据,当使用Hibernate 的二级缓存后,注意不要有其他的应用或SessionFactory 来更改当前

数据库中的数据,这样缓存的数据就会与数据库中的实际数据不一致。

第2题:

关于Hibernate缓存说法错误的是()。

  • A、Hibernate缓存一般分为三类:一级缓存、二级缓存和查询缓存
  • B、Session的evict()方法用于从缓存中清除指定的持久化对象
  • C、Session的clear()方法用于刷新缓存
  • D、Session的flush()方法用于从缓存中清除所有持久化对象

正确答案:C,D

第3题:

在Hibernate中关于缓存正确的说法有()

A.Hibernate只有一级缓存

B.Hibernate有一级缓存也有二级缓存

C.一级缓存不是必须的

D.二级缓存可以使用Ehcache、Oscache等


参考答案:B, D

第4题:

下面关于Hibernate的说法,错误的是()

  • A、Hibernate是一个“对象-关系映射”的实现
  • B、Hibernate是一种数据持久化技术
  • C、Hibernate是JDBC的替代技术
  • D、使用Hibernate可以简化持久化层的编码

正确答案:C

第5题:

关于Hibernate,下列说法错误的是()

  • A、Hibernate是一个对象-关系映射工具
  • B、在MVC模式中,Hibernate属于控制层
  • C、Hibernate在JDBC的方式上进行封装,以简化JDBC方式繁琐的编码工作
  • D、在Hibernate中,可以通过xml格式的配置文件保存对象-关系的映射信息

正确答案:B

第6题:

说下Hibernate的缓存机制?


正确答案: 缓存是介于应用程序和物理数据源之间,其作用是为了降低应用程序对物理数据源访问的频次,从而提高了应用的运行性能。缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据。  
缓存的介质一般是内存,所以读写速度很快。但如果缓存中存放的数据量非常大时,也会用硬盘作为缓存介质。缓存的实现不仅仅要考虑存储的介质,还要考虑到管理缓存的并发访问和缓存数据的生命周期。 
Hibernate的缓存包括Session的缓存和SessionFactory的缓存,其中SessionFactory的缓存又可以分为两类:内置缓存和外置缓存。Session的缓存是内置的,不能被卸载,也被称为Hibernate的第一级缓存。SessionFactory的内置缓存和Session的缓存在实现方式上比较相似,前者是SessionFactory对象的一些集合属性包含的数据,后者是指Session的一些集合属性包含的数据。SessionFactory的内置缓存中存放了映射元数据和预定义SQL语句,映射元数据是映射文件中数据的拷贝,而预定义SQL语句是在Hibernate初始化阶段根据映射元数据推导出来,SessionFactory的内置缓存是只读的,应用程序不能修改缓存中的映射元数据和预定义SQL语句,因此SessionFactory不需要进行内置缓存与映射文件的同步。SessionFactory的外置缓存是一个可配置的插件。在默认情况下,SessionFactory不会启用这个插件。外置缓存的数据是数据库数据的拷贝,外置缓存的介质可以是内存或者硬盘。SessionFactory的外置缓存也被称为Hibernate的第二级缓存。

第7题:

什么是Hibernate一级缓存()

  • A、Hibernate一级缓存是Session的缓存
  • B、Hibernate一级缓存是SessionFactory的缓存
  • C、第一级缓存为必需,不允许且事实上也无法被卸除
  • D、第一级缓存可以设置

正确答案:A,C

第8题:

在Hibernate中关于缓存中却的说法有()

A.Hibernae只有一级缓存

B.Hibernate有一级缓存也有二级缓存

C.一级缓存不是必须的

D.二级缓存可以使用Ehcache、Oscache等


参考答案:B, D

第9题:

下面关于Hibernate说法正确的是()

  • A、Hibernate是ORM的一种实现方式
  • B、Hibernate不要JDBC的支持
  • C、属于控制层
  • D、属于数据持久层

正确答案:A,D

第10题:

hibernate都支持哪些缓存策略?


正确答案: Read-only:这种策略适用于那些频繁读取却不会更新的数据,这是目前为止最简单和最有效的缓存策略 * Read/write:这种策略适用于需要被更新的数据,比read-only更耗费资源,在非JTA环境下,每个事务需要在session.close和session.disconnect()被调用 
* Nonstrict read/write: 这种策略不保障两个同时进行的事务会修改同一块数据,这种策略适用于那些经常读取但是极少更新的数据 
* Transactional: 这种策略是完全事务化得缓存策略,可以用在JTA环境下

更多相关问题