मान लीजिए कि हम दो संस्थाओं, एक करते हैं और बी बी ए की तरह करने के लिए एक बहुत-से-एक संबंध नहीं है इस प्रकार है:क्या मुझे जेपीए या डेटाबेस कैस्केड हटाने को देना चाहिए?
@Entity
public class A {
@OneToMany(mappedBy="a_id")
private List<B> children;
}
@Entity
public class B {
private String data;
}
अब, मैं एक वस्तु हटा सकते हैं और करने के लिए हटाए गए झरना करना चाहते हैं सब अपने बच्चे (बी)। ऐसा करने के दो तरीके हैं:
1) cascade=CascadeType.ALL, orphanRemoval=true
को OneToMany एनोटेशन में जोड़ें, जेपीए डेटाबेस से ए-ऑब्जेक्ट को हटाने से पहले सभी बच्चों को हटा दें।
2) कक्षाओं को छोड़ दें और बस डेटाबेस को हटाए जाने दें।
क्या बाद के विकल्प का उपयोग करने में कोई समस्या है? क्या यह एंटिटी मैनेजर को पहले से हटाए गए ऑब्जेक्ट्स के संदर्भ रखने का कारण बनता है? विकल्प को दो से अधिक चुनने का मेरा कारण यह है कि विकल्प एक हटाने के लिए एन + 1 एसक्यूएल क्वेरी उत्पन्न करता है, जिसमें ऑब्जेक्ट ए में बहुत सारे बच्चे होते हैं, जबकि विकल्प दो केवल एक ही SQL क्वेरी उत्पन्न करता है और फिर चलता है आनंद से। क्या इसके बारे में कोई "सर्वश्रेष्ठ अभ्यास" है?
लगता है कि मैं क्या देख रहा था! बहुत बुरा यह विक्रेता विशिष्ट है, लेकिन इसे करना होगा। धन्यवाद! –