为了账号安全,请及时绑定邮箱和手机立即绑定

Hibernate中的第一级和第二级缓存是什么?

Hibernate中的第一级和第二级缓存是什么?

德玛西亚99 2019-09-18 13:29:44
任何人都可以用简单的话来解释Hibernate中的第一级和第二级缓存是什么?
查看完整描述

3 回答

?
三国纷争

TA贡献1804条经验 获得超7个赞

Streamline Logic博客上的第一级缓存有一个非常好的解释。


基本上,第一级缓存在每个会话的基础上发生,因为第二级缓存可以在多个会话之间共享。


查看完整回答
反对 回复 2019-09-18
?
ITMISS

TA贡献1871条经验 获得超8个赞

这里有一些hibernate缓存的基本解释......

第一级缓存与“会话”对象相关联。缓存对象的范围是会话。会话关闭后,缓存的对象将永远消失。默认情况下启用一级缓存,您无法禁用它。当我们第一次查询实体时,它从数据库中检索并存储在与hibernate会话相关联的第一级缓存中。如果我们使用相同的会话对象再次查询同一个对象,它将从缓存加载,并且不会执行sql查询。可以使用evict()方法从会话中删除加载的实体。如果已使用evict()方法删除该实体,则下一次加载此实体将再次进行数据库调用。可以使用clear()方法删除整个会话缓存。它将删除存储在缓存中的所有实体。

二级缓存与第一级缓存不同,后者可在会话工厂范围内全局使用。在会话工厂范围中创建二级缓存,并且可以在使用该特定会话工厂创建的所有会话中使用。这也意味着一旦会话工厂关闭,与之关联的所有缓存就会消失,缓存管理器也会关闭。每当hibernate会话尝试加载一个实体时,它首先在第一级缓存中寻找实体的缓存副本(与特定的hibernate会话相关联)。如果实体的缓存副本存在于第一级缓存中,则它将作为load方法的结果返回。如果第一级缓存中没有缓存实体,则查找第二级缓存以获取缓存实体。如果二级缓存具有缓存实体,则它将作为load方法的结果返回。但,在返回实体之前,它也存储在第一级缓存中,以便下一次调用实体的加载方法将从第一级缓存本身返回实体,并且不需要再次进入二级缓存。如果在第一级缓存和第二级缓存中也找不到实体,则执行数据库查询并将实体存储在两个缓存级别中,然后作为响应返回load() 方法。


查看完整回答
反对 回复 2019-09-18
  • 3 回答
  • 0 关注
  • 519 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信