这个查询方法如何工作?

时间:2018-02-23 06:45:00

标签: spring-data-neo4j

@Query("MATCH (m:Movie)<-[r:ACTED_IN]-(a:Person) RETURN m,r,a LIMIT {limit}")
Collection<Movie> graph(@Param("limit") int limit);

对于这个查询,它返回&#34; RETURN m,r,a&#34;,这是一个包含3个元素的完整子图。那么为什么&#39;图表的返回值为&#39;方法是&#34;电影&#34;的集合。只要? &#39; r,a&#39;也返回了。

我正在努力了解幕后的机制。

1 个答案:

答案 0 :(得分:0)

您的类路径中似乎已定义@RelationshipEntity但在域类中定义@Relationship时不使用它。

样品:

@NodeEntity
class Pet {
    // ...
}

@NodeEntity
class Person {
    @Relationship(type = "HAS")
    private List<Pet> pets;
    // ...
}

@RelationshipEntity(type = "HAS")
class HasRelationship {
    // ...
}

如果Neo4j OGM在SDN的幕后发现关系类型,它首先查找@RelationshipEntity,如果找到它们,则尝试将返回的类型映射回@NodeEntity。在这种情况下,OGM会找到HasRelationship,并希望将其映射到Person类。这会失败,因为Person只知道Pet并且对象被丢弃。

就像我的回答on GitHub