繁体   English   中英

为什么不加入查询命中Hibernate二级缓存?

[英]Why don't join queries hit Hibernate second-level cache?

我对Hibernate二级缓存有一些困惑。我已经读过,Hibernate二级缓存只存储id,只有在通过id查询查找的情况下才有用。为什么hibernate在连接的情况下不使用缓存是否缓存了连接完成的两个表的ID? 我运行了一个程序来测试它,发现在启用缓存的情况下,连接查询花费了更多时间。

谢谢!

二级缓存缓存由ID索引的实体状态。 但它是一个缓存。 它只存储一些实体(通常是最近使用的实体)。

因此,即使Hibernate可以解析查询,分析它,注意它只包含对实体ID的限制,它不能使用它的缓存来绕过数据库,因为它不知道是否所有将返回的实体数据库是在缓存中还是不在缓存中。 因此,它不会像所有其他查询一样完成所有操作,而只是执行查询。

但您可以做的是配置查询缓存。 这会使它缓存先前执行的查询返回的实体的ID。 在这种情况下,将绕过相同查询的第二次执行(具有相同的参数),将从查询缓存返回ID,并且将从第二级缓存加载状态。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM