例如,我有一个这样的实体:
@Data
@NodeEntity(label = "Subject")
public class Subject {
@GraphId
private Long id;
private String name;
@Relationship(type = "HAVE_S", direction = Relationship.OUTGOING)
private Set<Subject> children = new HashSet<>();
}
然后我需要通过graphId查询'Subject';
@Query("MATCH (s:Subject)-[r:HAVE_S*1]->(c:Subject) WHERE ID(s) = {graphId} RETURN s, r, c;")
Subject findById(@Param("graphId") Long graphId);
我想要的结果就像下面的json:
{
"id": 62
"name": "Java"
"children": [
{
"name": "Collection",
"id": 105
},
{
"name": "MultipleThreads",
"id": 0
}
]
}
但是当我通过Spring Data执行上面的密码时,出现错误并说“结果不是预期的大小。预期1行,但发现3”。
希望我能帮助我解决这个问题,
答案 0 :(得分:0)
正如模型所建议的,一个对象有多个孩子,因此当您通过id来获取它时,它将返回您的孩子*的笛卡尔乘积。在这种情况下,您需要收集孩子(对象然后返回)
@Query("MATCH (s:Subject)-[r:HAVE_S*1]->(c:Subject) WHERE ID(s) = {graphId} RETURN s, collect(c) as childrens;")
或者只是您可以使用SDN将自行创建查询的存储库中的findById()
答案 1 :(得分:0)
您可以尝试这样。
MATCH (k:LabelsTree {name:'465afe3c118589de357745a709c0441f'}) CALL apoc.path.spanningTree(k,{labelFilter:'+LabelsTree', maxLevel:3, optional:true, filterStartNode:true}) yield path return path