2012-12-25 78 views
0

使用spring-data neo4j,我有2个节点实体:snippet和person。每个片段都有一个作者。以下是课程,然后测试失败:spring-data neo4j:无法找到相关实体的节点实体

@NodeEntity 
public class SnippetLink { 
    @GraphId 
    @GeneratedValue 
    Long id; 

    @Fetch 
    @RelatedTo(type = "AUTHORED") 
    @Indexed 
    PersonLink author; 

    @RelatedToVia(type = SnippetRelation.DERIVED_FROM) 
    SnippetLink parent; 

    Long documentId; 

    public SnippetLink() { 
    } 

    public SnippetLink(PersonLink author, Long documentId) { 
     this.author = author; 
     this.documentId = documentId; 
    } 

    public PersonLink getAuthor() { 
     return author; 
    } 

    public void setAuthor(PersonLink author) { 
     this.author = author; 
    } 

    public Long getDocumentId() { 
     return documentId; 
    } 

    public void setDocumentId(Long documentId) { 
     this.documentId = documentId; 
    } 

    public SnippetLink getParent() { 
     return parent; 
    } 

    public void setParent(SnippetLink parent) { 
     this.parent = parent; 
    } 

    public SnippetRelation fork(PersonLink author) { 
     SnippetLink child = new SnippetLink(author, documentId); 
     return new SnippetRelation(this, child, SnippetRelation.Type.Fork); 
    } 

    public SnippetRelation revision(Long documentId) { 
     SnippetLink child = new SnippetLink(getAuthor(), documentId); 
     return new SnippetRelation(this, child, SnippetRelation.Type.Revision); 
    } 
} 

@NodeEntity 
public class PersonLink { 
    @GraphId 
    Long id; 

    String login; 

    String firstName; 

    String lastName; 

    public PersonLink() { 
    } 

    public PersonLink(String login, String firstName, String lastName) { 
     this.login = login; 
     this.firstName = firstName; 
     this.lastName = lastName; 
    } 

    public String getLogin() { 
     return login; 
    } 

    public void setLogin(String login) { 
     this.login = login; 
    } 

    public String getFirstName() { 
     return firstName; 
    } 

    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 

    public String getLastName() { 
     return lastName; 
    } 

    public void setLastName(String lastName) { 
     this.lastName = lastName; 
    } 
} 

public interface SnippetLinkRepository extends GraphRepository<SnippetLink>{ 
    Iterable<SnippetLink> findByAuthor(PersonLink author); 
} 

PersonLink author = template.save(new PersonLink("johns", "John", "Smith")); 

SnippetLink snippet = template.save(new SnippetLink(author, -1L)); 

SnippetRelation revisionRelation = snippet.revision(-2L); 
template.save(revisionRelation.getChild()); 
template.save(revisionRelation); 

Iterable<SnippetLink> snippets = snippetLinkRepository.findByAuthor(author); 
assertThat(snippets).hasSize(2); 
+0

它是如何失败? –

+0

你的'SnippetRelation'类代码缺失。 –

回答

0
@RelatedToVia(type = SnippetRelation.DERIVED_FROM) 
SnippetLink parent; 

这应该是

@RelatedTo(type = SnippetRelation.DERIVED_FROM) 
SnippetLink parent; 

RelatedToVia使用,当你要访问一个实体的关系(实体)。 由于SnippetLink是一个实体,所以您需要使用realatedTo。