Hibernate:访问不同缓存的顺序

时间:2014-11-06 13:52:22

标签: java hibernate caching

我对hibernate和它提供的缓存功能相当新。经过一些阅读后我得知,基本上有四种不同的缓存,其中两种默认情况下未激活:

  • Hibernate 1st Level Cache
  • Hibernate查询计划缓存
  • 休眠二级缓存(可选)
  • Hibernate Query Cache(可选)

当某个客户端软件触发查询时,有人可以向我解释这些缓存的访问顺序吗?(现在假设我们已经激活并填充了所有这四个缓存)。 / p>

我希望得到一个理解:第一个Hibernate在这个缓存中查找,然后尝试这个&然后检查这个缓存,然后......,最终仍然执行此操作和那个SQL查询。 / p>

1 个答案:

答案 0 :(得分:1)

AFAIK取决于您访问数据的方式。

如果你正在访问一些需要延迟加载的实体,Hibernate将按顺序检查第一级和第二级缓存,并发出缓存未命中的查询。因此,第一级和第二级缓存也可以命名为实体缓存。

另一方面,查询缓存将存储已执行的查询结果,如果您自己执行查询,则会使用查询缓存。缓存键将是查询和参数,因此如果两者完全匹配,您将获得缓存命中。即使这样,实体缓存也可能被涉及,因为查询缓存只会存储实体的ID,然后Hibernate必须在实体缓存中查找它们或加载它们。

查询计划缓存在执行查询时也会使用,但只会缓存已解析的查询(很可能是AST),即查询仍在执行,但在缓存命中时不必再次解析。

这是一个包含更多信息的链接。它有点过时但一般概念应该仍然有效:http://www.javalobby.org/java/forums/t48846.html