मैं अपने वेब-एप में हाइबरनेट पर जेपीए का उपयोग कर रहा हूं। आप देख सकते हैं और Parent
Child
"एक-से-कई" के रूप में संबंधित के रूप मेंजेपीए संग्रह से बच्चे को हटा रहा है
class Child { private Parent parent; @ManyToOne(optional=false) @JoinColumn(name="parent_id", referencedColumnName="parent_id", nullable=false, updatable=false) public Parent getParent() { return parent; } } class Parent { private Collection children; @OneToMany(fetch=FetchType.EAGER, mappedBy="parent", cascade={CascadeType.ALL}) public Collection getChildren() { return children; } }
: यहाँ दो संस्थाओं (केवल टिककर खेल दिखाया जाता है) कर रहे हैं।
अब मुझे Parent
उदाहरण लोड करने की आवश्यकता है, कुछ या सभी बच्चों को हटाएं और परिवर्तनों को सहेजें। नीचे कोड है जो मेरे लिए काम नहीं करता है:
Parent p = entityManager.find(Parent.class, 12345L); // load entity p.getChildren().clear(); // remove all children entityManager.merge(p); // try to save
उपरोक्त उदाहरण में बाल संस्थाएं नहीं हटाई जाती हैं। अब मुझे प्रत्येक बच्चे के लिए मैन्युअल रूप से entityManager.remove()
पर कॉल करना होगा।
क्या बाल संग्रह का प्रबंधन करने का कोई आसान तरीका है? कृपया ध्यान दें कि मैं हाइबरनेट-विशिष्ट कार्यक्षमता, केवल शुद्ध जेपीए का उपयोग नहीं करना चाहता हूं।
सादर, एंड्री
संभव डुप्लिकेट: //stackoverflow.com/questions/306144/jpa-cascadetype-all-does-not-delete-orphans) –