3 回答
TA贡献1871条经验 获得超8个赞
这里有一些hibernate缓存的基本解释......
第一级缓存与“会话”对象相关联。缓存对象的范围是会话。会话关闭后,缓存的对象将永远消失。默认情况下启用一级缓存,您无法禁用它。当我们第一次查询实体时,它从数据库中检索并存储在与hibernate会话相关联的第一级缓存中。如果我们使用相同的会话对象再次查询同一个对象,它将从缓存加载,并且不会执行sql查询。可以使用evict()
方法从会话中删除加载的实体。如果已使用evict()
方法删除该实体,则下一次加载此实体将再次进行数据库调用。可以使用clear()
方法删除整个会话缓存。它将删除存储在缓存中的所有实体。
二级缓存与第一级缓存不同,后者可在会话工厂范围内全局使用。在会话工厂范围中创建二级缓存,并且可以在使用该特定会话工厂创建的所有会话中使用。这也意味着一旦会话工厂关闭,与之关联的所有缓存就会消失,缓存管理器也会关闭。每当hibernate会话尝试加载一个实体时,它首先在第一级缓存中寻找实体的缓存副本(与特定的hibernate会话相关联)。如果实体的缓存副本存在于第一级缓存中,则它将作为load方法的结果返回。如果第一级缓存中没有缓存实体,则查找第二级缓存以获取缓存实体。如果二级缓存具有缓存实体,则它将作为load方法的结果返回。但,在返回实体之前,它也存储在第一级缓存中,以便下一次调用实体的加载方法将从第一级缓存本身返回实体,并且不需要再次进入二级缓存。如果在第一级缓存和第二级缓存中也找不到实体,则执行数据库查询并将实体存储在两个缓存级别中,然后作为响应返回load()
方法。
- 3 回答
- 0 关注
- 519 浏览
添加回答
举报