spring data neo4j(SDN4) - 按关系查找

时间:2017-01-18 17:43:08

标签: spring-data-neo4j

我正在研究Neo4J的弹簧数据,我看到了一些例子,你只是按照一些标准在存储库界面中定义一个方法(通过一个特定的属性来查找),并且它会由spring自动处理。例如:findByName。

它使用基本属性非常简单,但当属性实际上是一种关系时它似乎不起作用。

见这个例子:

public class AcceptOrganizationTask extends AbstractTask {
    @Relationship(type="RELATES_TO", direction = "OUTGOING")
    private OrganizationInvite invitation;
    ...
}

在存储库界面中,我定义了3个方法(All具有相同的目标):

List<AcceptOrganizationTask> findAllByInvitation(OrganizationInvite invite);

    @Query("MATCH (i:OrganizationInvite)<-[RELATES_TO]-(t:AcceptOrganizationTask) WHERE i={invite} RETURN t")
List<AcceptOrganizationTask> getTaskByInvitation(@Param("invite") OrganizationInvite invite);

AcceptOrganizationTask findByInvitation_Id(Long invitationId);

他们都不能通过其邀请属性检索任务。但是,如果我使用findAll(),我可以获得具有与正确邀请相关联的属性的对象。

我错过了什么吗?

Bellow我为这三种方法生成了Cypher代码:

findAllByInvitation

MATCH (n:`AcceptOrganizationTask`) 
   WHERE n.`invitation` = { `invitation_0` } 
   WITH n MATCH p=(n)-[*0..1]-(m) RETURN p, ID(n) 
   with params {invitation_0={entityId=15, version=0, createdOn=1484758262374, lastChanged=1484758262374, createUser=null, lastUpdatedBy=null, email=user2@acme.com, randomKey=fc940b14-12c3-4894-b2b4-728e3a6b8036, invitedUser={entityId=11, version=0, createdOn=1484758261450, lastChanged=1484758261450, createUser=null, lastUpdatedBy=null, name=User user2@acme.com, email=user2@acme.com, credentialsNonExpired=true, lastPasswordResetDate=null, authorities=null, authoritiesInDB=[], accountNonExpired=true, accountNonLocked=true, enabled=true, id=11}, id=15}}

getTasksByInvitation

MATCH (i:OrganizationInvite)<-[RELATES_TO]-(t:AcceptOrganizationTask)
WHERE i={invite} RETURN t with params {invite=15}

findByInvitation_Id

MATCH (n:`AcceptOrganizationTask`) 
MATCH (m0:`OrganizationInvite`) 
   WHERE m0.`id` = { `invitation_id_0` } 
MATCH (n)-[:`RELATES_TO`]->(m0) 
WITH n 
   MATCH p=(n)-[*0..1]-(m) RETURN p, ID(n) 
with params {invitation_id_0=15}

所有实体都从具有和long id字段的公共AbstractEntity继承,并使用@GraphId注释。

我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

目前,派生查询器查询支持仅适用于一个嵌套级别。

我们希望在未来几周内尽快添加此功能。

现在,您可以编写自定义@Query来解决此问题。