java - 为什么join查询不命中Hibernate二级缓存?

标签 java hibernate jpa persistence

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

谢谢!

最佳答案

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

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

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

关于java - 为什么join查询不命中Hibernate二级缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16271938/

相关文章:

java - 使用 ActionListener 访问预父类

java - 使用 GSON 解析器迭代数据集

java - HQL 查询执行时间过长

java - 使用 H2 和 Oracle 的 Spring Boot

java - @UniqueConstraint 的 Spring boot/Hibernate 问题

java - HyperJAXB 和 IDREF

java - jpa中的范围查询

java - jar 文件将不会运行。在cmd中获取错误

java - 如何使用 JDOM 解析 SOAP

java - 创建名为“entityManagerFactory”的 bean 时出错,无法正常运行应用程序