跳转到正文
Zhou 的博客
搜索文章
首页/文章

使用Spring Data Neo4J查询路径

playerzhou··约 3 分钟

以一个简单的路径查询为例,对于以下查询语句来说

@Query("match p=(n)-[*]-[m] return p")

若使用自己定义的关系类来获取该查询的返回值,得到的结果是查询出的若干路径的所有边的列表,若想获得路径序列,还需再对得到的数据进行处理,并不方便。

通过在Stackoverflow上搜索,我得到如下解决方法,将返回值定义为Iterable<Map<String,Object>>,其中每个Map只有一个Key值“p”,对应value即为该条路径

在Stackoverflow的答案中,获取的路径变量为List,但经过实际测试,也许是Spring Data Neo4j修改了内部实现,获取的路径变量类型为数组,数组中每个元素即代表路径中的某一条边,类型为Neo4j Driver中定义的内部类,但通过查看源码可以发现,该内部类实现接口Path.Segment,因此可直接使用该接口作为变量类型,至于如何使用获取到的变量,可直接参考相应API。

下面即为个人使用该方法获取路径的代码示例:

     Iterable<Map<String,Object>> iterable =entityRepository.getRelation(entity);
        List<List<Integer>> result = new ArrayList<>();
        for(Map<String,Object> row:iterable){
            List<Integer> tmp_path=new ArrayList<>();
            tmp_path.add(entity.getStart());
            Path.Segment[] path= (Path.Segment[]) row.get("p");
            for(Path.Segment segment:path){
                Map<String, Object> map=segment.end().asMap();
                tmp_path.add(Integer.valueOf(map.get("entityId").toString()));
            }
            result.add(tmp_path);
        }
        return result;

感谢阅读

漂流瓶留言 0

留下一只漂流瓶

邮箱地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据。

背景音乐DANA

准备播放

歌单与设置
0:00

DANA / イースVIII -Lacrimosa of DANA- オリジナルサウンドトラック [完全版] / Copyright © Nihon Falcom Corporation

音乐使用规范 ↗

你好,欢迎来访。

丹娜 · Iclucian
↑