首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JPA中的setMaxResults与fetch联接相结合

JPA中的setMaxResults与fetch联接相结合
EN

Stack Overflow用户
提问于 2015-01-30 13:00:06
回答 1查看 1.3K关注 0票数 0

在我们的应用程序中,我们有一个带有两个过滤器字段的搜索屏幕。当您单击search按钮时,将执行一个查询,该查询将获取几个结果并在网格中列出它们。

但是,可以有大量的数据,因此我们希望将返回结果的数量限制在1000以下。我们使用OpenJPA将返回记录映射回我们的模型类和作为数据库引擎的SQL server。有一段时间,我使用以下代码限制了返回结果的数量:

代码语言:javascript
复制
return entityManager.createQuery(query).setMaxResults(1000).getResultList();

直到最近我向原始查询添加了几个联接,这才起了很大作用。

比方说,你想要得到10个“联系人”。每个联系人有5个地址。执行以下查询时:

代码语言:javascript
复制
select c from Contact c left join fetch c.address

实际执行的查询选择50条记录(每个联系人5行,每个地址1行)。这是给10位联系人的。

并将其限制为10个结果,并检查针对数据库执行的查询,该查询被翻译为“从.选择前10名”。

这将转换为10个记录,而不是10个实体。因此,在我的示例中,返回的联系人列表将包含2个联系人及其5个地址。

这就引出了我的问题:我能做什么来确保返回10个实体的完整数据--而不是前10条记录?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-30 13:21:27

我假设联系人可能没有确切的5个地址(因为如果是这样的话,答案将是微不足道的)。

您在SQL中(据我所知,您应该检查供应商的文档)或JPQL中都没有一个查询结构,可以根据您的需要进行查询。因此,您唯一的选择是像现在这样从DB中获取一个页面,然后计数返回的联系人数量,然后在需要更多的时候获取下一个页面,以此类推,直到您有足够的联系人。要做到这一点,您可以使用setFirstResult和setMaxResults。

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

https://stackoverflow.com/questions/28236504

复制
相关文章

相似问题

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