Spring Data Neo4j可分页
我有一个Spring Data Repository接口,它使用自定义查询从数据库中获取节点集合:
存储库方法:
@Query ("START r = node({0}) MATCH r <-[:AUTHOR]- m RETURN m") public Page findObjectById (long objectId,Pageable pageable);
方法调用
custRepository.findObjectById (4,new PageRequest(0, 5));
这将返回一个对象集合,但页面信息不正确。 数据库中有足够的数据供我获取多页数据。 第一页信息说有:
Current Page #: 0 Total Pages: 1 Is First Page: true Is last Page: true
但是,当我获取第二页时,我仍然获得其他对象的集合,然后页面信息变为:
Current Page #: 1 Total Pages: 6 Is First Page: false Is last Page: false
这清楚地表明第一页上的页面信息不正确,因为我需要准确的信息来在我的应用程序中实现分页,这就成了一个问题。 是什么导致了这个问题,我该如何解决?
我提出同样的问题。 事实certificate,您还必须指定查询注释的countQuery属性。 不确定它是否有错误记录。 在你的情况下应该是
@Query (value="START r = node({0}) MATCH r <-[:AUTHOR]- m RETURN m", countQuery="START r = node({0}) MATCH r <-[:AUTHOR]-m RETURN count(m)")
希望它能帮到你。
我遇到了同样的问题,经过一些研究,我在类org.springframework.data.neo4j.repository.query.GraphRepositoryQuery中发现了一个错误。
以下方法是问题所在
@SuppressWarnings({"unchecked", "rawtypes"}) protected Object createPage(Iterable> result, Pageable pageable, Long count) { final List resultList = IteratorUtil.addToCollection(result, new ArrayList()); if (pageable==null) { return new PageImpl(resultList); } long currentTotal; if (count!=null) { currentTotal = count; } else { int pageSize = pageable.getPageSize(); long requestedCountStart = pageable.getOffset() * pageSize; long resultSize = resultList.size(); currentTotal = resultSize == pageSize ? requestedCountStart + pageSize : requestedCountStart+resultSize; } return new PageImpl(resultList, pageable, currentTotal); }
特别是那些线:
int pageSize = pageable.getPageSize(); long requestedCountStart = pageable.getOffset() * pageSize;
转换为requestedCountStart = page * size * size
有谁知道在哪里提交Neo4j的错误报告的最佳位置?
BTW我使用的是spring-data-neo4j版本3.0.0.RELEASE