无法了解查询缓存和L2C如何在休眠状态下工作

时间:2019-01-31 22:45:11

标签: hibernate caching second-level-cache query-cache

我将Hazelcast配置为Hibernate的L2C。然后使用带有查询缓存提示的休眠查询生成器发出第一个请求,我得到:

// I used _ = because VS said me something about async
_ = Seed.CreateRoles(serviceProvider, Configuration);

将L2C放入。当我执行第二个请求时,我得到了大量的选择查询,其ID为find。

Hazelcast,Hibernate的配置很简单,没什么复杂的。

实体是联接表继承。

在超类上使用的

@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)批注。

Vlad Mihalcea的经检查的文章:8-避免n + 1问题的建议并不完全适合我的情况。

预期在第二次请求时从缓存中获取结果,但似乎我不了解查询缓存的实际工作方式。 有人可以逐步解释查询缓存的工作原理吗?

1 个答案:

答案 0 :(得分:1)

Hibernate不会将查询结果整体存储在'query'区域中;而是存储一组ID,其中实体位于其他“实体”区域。

我的猜测:如果配置错误,并且Hazelcast本身不存储实体,则可能会从查询缓存中获知条目ID列表,但会逐个加载实际的实体。

查询并检查缓存区域的大小。