2012-11-22 37 views
9

पहले मुझे उम्मीद है कि CascadeType.REMOVE के साथ मैं अपनी तालिका में विदेशी कुंजी को हटाने में सक्षम हूं, लेकिन मुझे एक अपवाद मिला है। लेकिन @CascadeOnDelete के साथ यह ठीक है। दो एनोटेशन के बीच क्या अंतर है?@CascadeOnDelete और CascadeType.REMOVE एनोटेशन के बीच क्या अंतर है?

संपादित करें: मैं हटाने पर DataNucleus 'comment.Cascade देखा गया है कौन सा सवाल यह है कि अच्छा विचार किया जाना है तो उठाती org.eclipse.persistence.annotations.CascadeOnDelete से आता है।

+1

आपको क्या अपवाद मिला? – Ilya

+1

@CascadeOnDelete जेपीए का हिस्सा नहीं है, तो आप उल्लेख यह जहां – DataNucleus

+1

से आता है अपवाद था सुझाव है: 'मेज पर DELETE 'XXX' कुंजी (xxx) के लिए विदेशी कुंजी बाधा 'YYY' का उल्लंघन का कारण बना। बयान back.' रोल किया जाता है – npocmaka

उत्तर

6

जब आप कास्केड टाइप का उपयोग करते हैं। उस समय हटाएं जब कैस्केडिंग ओआरएम उपकरण द्वारा संभाला जाएगा, लेकिन जब आप डेटाबेस द्वारा कैस्केडिंग को संभालना चाहते हैं तो आप @ CascadeOnDelete.but का उपयोग कर सकते हैं जब आप @CascadeOnDelete का उपयोग कर रहे हैं, सुनिश्चित करें आपके द्वारा उपयोग किए जा रहे डेटाबेस को कैस्केडिंग का समर्थन करना चाहिए।

+0

धन्यवाद.यह मतलब यह है कि CascadeOnDelete से बचने के लिए अगर यह संभव है .... – npocmaka

+3

यह कैसे आप इसे प्रयोग कर रहे हैं पर निर्भर करता है आप अपने कोड तो आप जेपीए विनिर्देशन के साथ सख्ती से पालन करने के लिए चाहते हैं बेहतर है CascadeOnDelete का उपयोग नहीं करना चाहिए। लेकिन यदि आप सुनिश्चित हैं कि यदि आपका जेपीए प्रदाता बदल नहीं रहा है तो यह कैस्केडोनडेलेट का उपयोग करने के लिए उपयोगी हो सकता है। अधिक जानकारी के लिए आप उल्लेख कर सकते हैं [कड़ी] (http://wiki.eclipse.org/EclipseLink/Examples/JPA/DeleteCascade) –