这种查询方法是如何工作的?

How does this query method work?

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

对于此查询,它是 returning "RETURN m, r, a",这是一个包含 3 个元素的完整子图。那为什么'graph'方法的return值只是"Movie"的集合呢? 'r, a' 在哪里,它也是 returned.

我正在尝试了解幕后的机制。

您的 class 路径中似乎定义了 @RelationshipEntity,但在域 classes 中定义 @Relationship 时没有使用它。

样本:

@NodeEntity
class Pet {
    // ...
}

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

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

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

喜欢我的回答on GitHub