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

时间:2013-04-29 05:47:28

标签: java hibernate jpa persistence

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

谢谢!

1 个答案:

答案 0 :(得分:2)

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

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

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