पर काम नहीं कर रहा है, मैं विभिन्न संबंधों (केवल @ManyToOne
) में शामिल एक इकाई को हटाने के लिए कड़ी मेहनत कर रहा हूं - हालांकि, em.remove
पर कॉल करने के बाद, हाइबरनेट कुछ भी नहीं हटाता है, सबकुछ अपरिवर्तित रहता है। बाईंहाइबरनेट एंटिटी मैनेजर: संदर्भित इकाई को
public class E6{
@ManyToOne(optional = false)
private E1 e1;
@ManyToOne(optional = false)
private E2 e2;
@ManyToOne(optional = false)
private E3 e3;
@ManyToOne(optional = false)
private E4 e4;
@ManyToOne(optional = false)
private E5 e5;
}
(:
मैं 5 संस्थाओं (E1 - E5
) है, इस तरह के प्रश्न में इकाई (E6
) को संदर्भित:
@Entity
public class EX {
@OneToMany(mappedBy = "eX", fetch = FetchType.EAGER, cascade = { CascadeType.PERSIST, CascadeType.REMOVE })
private Set<E6> e6s;
}
E6
ही रिवर्स @ManyToOne
संबंध है आउट आईडी, अतिरिक्त कॉलम इत्यादि ...)
जब भी मैं em.remove(instanceOfE6)
पर कॉल करता हूं, तो बस कुछ भी नहीं होता है। मैंने हाइबरनेट एसक्यूएल-आउटपुट जोड़ा और DELETE
क्वेरी निष्पादित करने का एक भी प्रयास नहीं देख सकता।
के बाद से हटाए जाने के एक ajax अनुरोध और एक ताजा EntityManager से भी हो सकता है, मैं हटाए जाने से पहले विलय करने के लिए एक कॉल कहा, कारण otherwhise मैं एक इकाई अप्रबंधित अपवाद मिलती है:
em.remove(em.merge(instanceOfE6));
लेकिन कुछ भी नहीं । राज्य अपरिवर्तित बनी हुई है।
तो मैंने इकाई को हटाने से पहले सभी संबंधों को साफ़ करने के लिए @PreRemove
विधि जोड़ने का प्रयास किया ... विधि कभी नहीं बुलाया जाता है।
मैंने कोशिश की विभिन्न कास्केड संचालन (सहित Cascade.ALL
) - लेकिन सभी मैं हटाने और जारी रहती है की जरूरत है, कि के रूप में अच्छी तरह से काम करना चाहिए के बाद से।
मैं एक देशी हटाएं वक्तव्य का उपयोग कर के बारे में सोचा (प्रत्येक इकाई एक किराए आईडी है, ताकि होगा सबसे अधिक संभावना काम) - लेकिन जब से सब कुछ AJAX द्वारा कॉल में से होता है, मैं उपयोग करने के लिए है कि नहीं करना चाहती , क्योंकि मैं दृढ़ता-कैश को प्रत्येक शामिल इकाई को फिर से लाने के बिना अद्यतन करना चाहता हूं ...
कोई विचार?
यदि आपको अधिक स्रोत की आवश्यकता है, तो बस मुझे एक टिप्पणी छोड़ दें। कोई भाग्य -
मैं भी उम्मीद है कि हाइबरनेट लिंक रद्द इकाई whipe होगा सभी संबंधों (बुद्धिमान वस्तु) से प्रश्न में इकाई को हटाने, और शेष संस्थाओं में से एक पर em.merge()
कॉल करने की कोशिश,।
क्या आपने लेनदेन किया था? –
क्या आपने 'em.flush()' को कॉल किया था? – jmvivo
@DavidLevesque autocommit मोड ... – dognose