可能这是一个基本问题,但无法在网络上的任何地方找到答案。

我正在尝试使用二级缓存(使用 ehcache),并且只是检查每次尝试加载某些对象时是否从数据库中检索它们,唯一的区别是我不是通过 id 获取它们,而是通过带有 id 的属性获取它们一个 SEO 友好的名称,用于在我正在工作的系统上创建 url。jpa/hibernate 是否能够仅通过 obj 的 id 从缓存中检索对象?有什么方法可以让它工作而不需要激活查询缓存吗?

有帮助吗?

解决方案

jpa/hibernate 是否能够仅通过 obj 的 id 从缓存中检索对象?

是的,二级缓存适用于基于以下条件查找单个对象的查询: Id IE。使用时 EntityManager.find() 或者 EntityManager.getReference() (或同等的 Session#get()Session#load() 来自 Hibernate API)。AFAIK,这适用于所有 JPA 实现。

有什么方法可以让它工作而不需要激活查询缓存吗?

对于标准 JPA,除了使用查询缓存之外,我没有看到任何其他选项。

但是如果你不介意使用 Hibernate API,可能还有一个替代方案 Query#iterate(). 。和 Query#iterate(), ,Hibernate 将发出一个 SQL 查询,该查询将仅获取 ID,当您迭代结果时,它将从缓存中加载相应的实体。

明显地, Query#iterate() 会比 Query#list() 如果您不使用二级缓存。

就我个人而言,我会使用查询缓存。

也可以看看

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top