2013-04-29 84 views
3

我对Hibernate二级缓存有些疑惑。我读过的内容是,Hibernate二级缓存仅存储ID,并且只有在通过ID查询进行查找的情况下才有用。为什么hibernate不使用缓存加入连接完成的两个表的ID是否被缓存? 我运行了一个程序来测试这个,发现启用缓存后,连接查询需要更多时间。为什么不加入查询命中Hibernate二级缓存?

谢谢!

回答

2

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

因此,即使Hibernate可以解析查询,分析它,注意它只包含实体ID的限制,它不能使用它的缓存绕过数据库,因为它不知道是否所有的实体将由数据库返回的缓存中或不存在。所以它不会这么做,只需执行查询,就像其他任何查询一样。

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

+0

非常感谢!!我正在查看连接查询会有不同参数的场景。在此缓存中,据我了解,不会有任何帮助吗? – Tazo 2013-04-30 06:45:33

+0

否。缓存服务于它已知的内容。 – 2013-04-30 06:57:55

相关问题