Mam strukturę danych drzewa, które chciałbym przechowywać przy użyciu Neo4j.Jak poprawnie kodować hierarchiczną zależność z węzłem tego samego typu w danych sprężynowych neo4j?
Jest węzeł nadrzędny :CodeSet
, która zawsze jest korzeniem drzewa i węzłów :Node
dziecko, które same mogą mieć węzły potomne tego samego typu. Są one powiązane z relacją typu :SUBTREE_OF
w następujący sposób:
Węzeł macierzysty jest wyświetlany na czerwono, a sam jego element macierzysty jest wyświetlany na zielono.
Gdy tylko węzeł nadrzędny i węzły potomne mają pewne wspólne dane, stworzyłem klasę abstrakcyjną:
public abstract class AbstractNode {
private Long id;
@NotEmpty
private String code;
@Relationship(type = "SUBTREE_OF", direction = Relationship.INCOMING)
private Set<Node> children;
<getters & setters omitted>
}
Class dla węzła nadrzędnego:
public class CodeSet extends AbstractNode {
@Relationship(type = "SUBTREE_OF", direction = Relationship.OUTGOING)
private Application parent;
<getters and setters omitted>
}
klasy do węzła potomnego:
public class Node extends AbstractNode {
@NotEmpty
private String description;
@NotEmpty
private String type;
@NotEmpty
private String name;
@NotNull
@Relationship(type = "SUBTREE_OF", direction = Relationship.OUTGOING)
private AbstractNode parent;
<getters and setters omitted>
}
Potrzebuję tylko aktualizacji węzła podrzędnego. Używam następujące metody w moim warstwie usług:
public Node update(Node node, Long nodeId) throws EntityNotFoundException {
Node updated = findById(nodeId, 0);
updated.setDescription(node.getDescription());
updated.setType(node.getType());
updated.setName(node.getName());
updated.setCode(node.getCode());
nodeRepository.save(updated);
return updated;
}
Z tym mam następujący wynik: Zależność jest zepsuty. Próbowałem również, aby określić depth=1
na findById
metoda parametru, ale to spowodowało niewłaściwych relacji jeszcze raz:
Potem starał się modyfikując dwukierunkową relację w moich zajęciach na jednokierunkowych tak tylko jedna klasa ma anotowane z polem @Relatinship
wskazujące na inny, ale to też nie pomogło.
Jak to działa?
Witam, której wersji SDN używasz? – Vince
@Vince to było 'org.springframework.data: spring-data-neo4j: 4.1.2.RELEASE' – Polyakoff