2017-01-18 77 views
2

我正在研究Neo4J的春季數據,我已經看到一些例子,您只需按照某些標準(通過特定屬性查找)在存儲庫接口中定義一個方法並它會在春天自動處理。例如:findByName。春季數據neo4j(SDN4) - 通過關係查找

它的基本屬性非常簡單,但當屬性實際上是關係時似乎不起作用。

見這個例子:

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

在我定義了3種方法(都具有相同的目標)庫接口:

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(),我可以得到具有與正確邀請關聯的屬性的對象。

我錯過了什麼嗎?

婁我有這三種方法生成的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 protected], randomKey=fc940b14-12c3-4894-b2b4-728e3a6b8036, invitedUser={entityId=11, version=0, createdOn=1484758261450, lastChanged=1484758261450, createUser=null, lastUpdatedBy=null, name=User [email protected], [email protected], 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} 

所有實體都繼承自一個常見的AbstractEntity和Long ID字段,並使用@GraphId註解。

我錯過了什麼嗎?

回答

0

目前派生的查找器查詢只支持一個級別的嵌套作品。

儘管我們希望在未來幾周內儘快添加此功能。

現在你可以寫一個自定義@Query來解決這個問題。