在我们的应用程序中,我们有一个带有两个过滤器字段的搜索屏幕。当您单击search按钮时,将执行一个查询,该查询将获取几个结果并在网格中列出它们。
但是,可以有大量的数据,因此我们希望将返回结果的数量限制在1000以下。我们使用OpenJPA将返回记录映射回我们的模型类和作为数据库引擎的SQL server。有一段时间,我使用以下代码限制了返回结果的数量:
return entityManager.createQuery(query).setMaxResults(1000).getResultList();直到最近我向原始查询添加了几个联接,这才起了很大作用。
比方说,你想要得到10个“联系人”。每个联系人有5个地址。执行以下查询时:
select c from Contact c left join fetch c.address实际执行的查询选择50条记录(每个联系人5行,每个地址1行)。这是给10位联系人的。
并将其限制为10个结果,并检查针对数据库执行的查询,该查询被翻译为“从.选择前10名”。
这将转换为10个记录,而不是10个实体。因此,在我的示例中,返回的联系人列表将包含2个联系人及其5个地址。
这就引出了我的问题:我能做什么来确保返回10个实体的完整数据--而不是前10条记录?
发布于 2015-01-30 13:21:27
我假设联系人可能没有确切的5个地址(因为如果是这样的话,答案将是微不足道的)。
您在SQL中(据我所知,您应该检查供应商的文档)或JPQL中都没有一个查询结构,可以根据您的需要进行查询。因此,您唯一的选择是像现在这样从DB中获取一个页面,然后计数返回的联系人数量,然后在需要更多的时候获取下一个页面,以此类推,直到您有足够的联系人。要做到这一点,您可以使用setFirstResult和setMaxResults。
https://stackoverflow.com/questions/28236504
复制相似问题