spring-data neo4j を使用して、snippet と person の 2 つのノード エンティティがあります。各スニペットには作成者がいます。以下は、クラスと失敗したテストです。
@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);