首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JPA/HIBERNATE -缓存的对象实例是否仅按id索引?

JPA/HIBERNATE -缓存的对象实例是否仅按id索引?
EN

Stack Overflow用户
提问于 2010-10-25 07:21:30
回答 1查看 655关注 0票数 2

这可能是一个基本的问题,但在网络上找不到答案。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-10-25 08:12:01

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

是的,二级缓存适用于基于Id的查询,即在使用EntityManager.find()EntityManager.getReference() (或Hibernate API中的等效Session#get()Session#load() )时查找单个对象。AFAIK,这适用于所有JPA实现。

有没有办法让它在不需要激活查询缓存的情况下工作?

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

但是如果你不介意使用Hibernate API,Query#iterate()可能会有另一种选择。使用Query#iterate(),Hibernate将发出一个只获取ID的SQL查询,当您迭代结果时,它将从缓存中加载相应的实体。

显然,如果不使用二级缓存,Query#iterate()将比Query#list()慢得多。

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

另请参阅

  • Hibernate: Truly Understanding the Second-Level and Query Caches
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4010986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档