Spring数据查询到neo4j查询

时间:2016-08-23 06:20:10

标签: java spring neo4j spring-data spring-data-neo4j

我是Neo4j的初学者,我想将Spring数据查询转换为Neo4j Query。

我有三张桌子。

@RelationshipEntity(type = "IS_ATTENDING_EVENT")
public class IsAttendingEventDO {

    @GraphId
    private Long id;
    @Property
    private String isAttendingEventId;
    @StartNode
    private PersonDO personDO = new PersonDO();
    @EndNode
    private EventDO eventDO = new EventDO();


@NodeEntity(label="Person")
public class PersonDO {  

    @GraphId Long id;
    @Property
    private String personId;
    @Property
    private String name; 


@NodeEntity(label="Event")
public class EventDO {

    @GraphId
    private Long id;
    @Property
    private String eventId;

这是我的spring-data查询。

IsAttendingEventDO getByEventEventIdAndPersonPersonId(String eventId, String personId); 

请帮我将此查询转换为Neo4j查询。

此致 Parth Solanki。

1 个答案:

答案 0 :(得分:1)

我认为您应该通读Neo4j developers manual并了解Cypher的语法和用法。

基于对Cypher的基本了解,这是一个非常简单的查询。只需匹配您感兴趣的模式(参加活动的人,使用已定义的标签),在人员,事件和关系上提供变量,添加WHERE子句以限制匹配中的人和事件到给定的id参数,然后返回适合这些谓词适用的匹配模式的关系:

~/Library/Containers/com.docker.docker/Data/database/com.doc‌​ker.driver.amd64-lin‌​ux/etc/docker/daemon‌​.json

编辑:

回答你关于返回关系列表的评论(a:参加:事件的人),其中唯一给定的参数是eventId。

要从节点形成列表,可以使用COLLECT()函数。

因此,如果您尝试仅基于eventId获取关系,则不需要在:Person节点上提供变量,因为您没有任何谓词可应用于它,并且您不是不使用它或返回它。您感兴趣的只是参加活动的人与给定eventId的关系,并返回这些返回关系的集合。

MATCH (p:Person)-[rel:IS_ATTENDING_EVENT]->(e:Event)
WHERE p.id = {personId} AND e.id = {eventId}
RETURN rel

同样,请仔细阅读开发人员手册,并使用Cypher refcard来帮助您。当您阅读完基本文档后,您可以轻松完成所提出的问题。