首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate集合获取优化

Hibernate集合获取优化
EN

Stack Overflow用户
提问于 2010-06-25 17:44:42
回答 1查看 155关注 0票数 0

我有以下结构

商店

代码语言:javascript
复制
 Rebate
代码语言:javascript
复制
     RebateMetadata
代码语言:javascript
复制
     RebateCommission

所以,关系是这样的-

Store ->返点是一对多关系返点-> RebateMetadata是一对一映射返点-> RebateCommission是一对一映射

我的查询是加载所有存储。使用它,加载所有回扣、元数据和佣金。

我使用的HQL是:

从store as Store中选择store;

我希望在尽可能少的SQL中加载整个图。为了防止n+1选择问题,我在商店->返点之间使用子选择抓取。

然而,为了获取RebateMetadata和RebateCommission,我看到多个单独的selects(带有连接)被触发。我应该怎么做才能最小化这个问题呢?

此外,我打开了二级缓存,但关闭了QueryCache。

EN

回答 1

Stack Overflow用户

发布于 2010-06-25 18:03:32

你可以试试fetch join。我通常需要一段时间才能把它弄对,试着这样做:

代码语言:javascript
复制
select store from Store as store 
 left join fetch store.rebate rebate
 inner join fetch rebate.metadata 
 inner join fetch rebate.commission

编辑:根据我在hibernate文档中链接的倒数第二个示例进行了更新。这更有可能是正确的。

这可能不会起作用,但这是一般的想法。或者,您可以尝试在属性上使用批处理大小(注释@BatchSize),以确保像这样的属性被加载,比方说,一次加载50个项目(使用SELECT...IN查询)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3117018

复制
相关文章

相似问题

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