2013-12-13 67 views
3

我有一个Spring数据存储库接口,使用自定义查询的数据库中获取节点的集合来自:春数据Neo4j的可分页

库方法:

@Query ("START r = node({0}) MATCH r <-[:AUTHOR]- m RETURN m") 
public Page<Object> 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 

这显然显示第一页上的页面信息不正确,因为我需要准确的信息来在我的应用程序中实现分页,这成为一个问题。什么导致这个问题,我该如何解决它?

回答

4

我提出了同样的问题。原来你还必须指定查询注释的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)") 

希望它可以帮助你。

1

我已经encoutered同样的问题,经过一番研究,我发现在课堂上的错误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 =页面大小* *尺寸

有谁知道在哪里提交Neo4j的错误报告的最佳位置?

顺便说一句,我使用弹簧数据Neo4j的版本3.0.0.RELEASE

+0

@PhilBa解决方案的工作虽然 –

+0

,就可以提交问题有https://jira.spring.io/browse/DATAGRAPH/?selectedTab = com.atlassian.jira.jira项目 - 插件:问题面板 – Stephane