3

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

谢谢!

4

1 回答 1

2

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

所以,即使 Hibernate 可以解析查询,分析它,注意到它只包含对实体 ID 的限制,它也不能使用它的缓存来绕过数据库,因为它不知道是否所有的实体都将返回数据库是否在缓存中。所以它并没有做所有这些,只是像任何其他查询一样执行查询。

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

于 2013-04-29T09:51:38.273 回答