spring-data neo4j:找不到相关实体的节点实体

时间:2012-12-25 13:36:12

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

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

@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);

1 个答案:

答案 0 :(得分:0)

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

这应该是

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

当您想要访问实体的关系(实体)时,使用RelatedToVia。 由于SnippetLink是一个实体,因此您需要使用realatedTo。