2016-10-06 5 views
5

मेरे पास एक पेड़ डेटा संरचना है जिसे मैं Neo4j का उपयोग करके स्टोर करना चाहता हूं।वसंत डेटा neo4j में ठीक उसी प्रकार के नोड के पदानुक्रमिक संबंध को कैसे कोड करें?

एक माता-पिता नोड :CodeSet है, जो हमेशा पेड़ की जड़ है और एक बच्चे नोड :Node है, जिसमें स्वयं एक ही प्रकार के बच्चे नोड्स हो सकते हैं। वे :SUBTREE_OF के प्रकार के संबंध में निम्नानुसार जुड़े हुए हैं: tree data structure

पैरेंट नोड लाल रंग में प्रदर्शित होता है और यह स्वयं ही हरे रंग में प्रदर्शित होता है।

जैसे ही माता पिता के नोड और बच्चे नोड्स कुछ सामान्य आंकड़े उपलब्ध नहीं हैं, मैं एक अमूर्त वर्ग बनाया: चाइल्ड नोड के लिए

public class CodeSet extends AbstractNode { 
    @Relationship(type = "SUBTREE_OF", direction = Relationship.OUTGOING) 
    private Application parent; 

    <getters and setters omitted> 
} 

कक्षा:: माता पिता नोड के लिए

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> 
} 

कक्षा

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> 
} 

मुझे केवल एक बच्चे नोड अपडेट करने की आवश्यकता है। मैं अपने सेवा परत पर निम्न विधि का उपयोग:

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; 
} 

इस के साथ मैं निम्नलिखित परिणाम मिला: result of node update संबंध टूट गया है। मैं भी findById विधि पैरामीटर पर depth=1 निर्दिष्ट करने के लिए बाहर की कोशिश की, लेकिन वह गलत रिश्तों में एक बार फिर से हुई: enter image description here

कि मैं-दिशात्मक विश्वविद्यालय इतनी के रूप में केवल एक ही वर्ग है मेरी वर्गों के लिए में द्वि-दिशात्मक संबंध को संशोधित करने के लिए बाहर की कोशिश की करने के बाद @Relatinship फ़ील्ड के साथ एक एनोटेटेड फ़ील्ड, लेकिन इससे कोई मदद नहीं मिली।

यह काम कैसे करें?

+0

हाय, एसडीएन का कौन सा संस्करण आप उपयोग कर रहे हैं? – Vince

+0

@ विन्स यह 'org.springframework.data था: spring-data-neo4j: 4.1.2.RELEASE' – Polyakoff

उत्तर

5

सेवा विधि में बचाने के संचालन को अपडेट करके हल किया गया था:

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()); 
    //added param depth=0 here 
    nodeRepository.save(updated, 0); 
    return updated; 
} 
+0

यह काम करता है क्योंकि यह किसी भी रिश्ते को अद्यतन नहीं करता है, लेकिन मुझे लगता है कि यह वास्तविक समस्या का मुखौटा कर रहा है। मौजूदा संबंधों को नष्ट नहीं किया जाना चाहिए। – Vince

0

हो सकता है कि वहाँ सार कक्षा में रिश्ते की अपनी परिभाषा के साथ एक समस्या है। बच्चों के नोड्स में रिश्तों को भी शामिल किया जाता है, इसलिए जब आप गहराई 1 संबंधों का उपयोग करते हैं तो द्विपक्षीय होते हैं।

संबंधित मुद्दे