के साथ नई ऑब्जेक्ट में प्रति ऑब्जेक्ट मानों को हाइबरनेट कॉपी करें, मैं कुछ नेस्टेड टेबल के साथ एक कॉलम पीके का उपयोग करके एक रिलेशनल डीबी का उपयोग कर रहा हूं। मुझे अपनी परियोजना में सरल संग्रह जोड़ने की जरूरत है। संग्रह केवल तभी होता है जब एप्लिकेशन किसी विशेष स्थिति तक पहुंचता है, इसलिए मैं जो करने की उम्मीद कर रहा था वह मेरी मौजूदा हाइबरनेट ऑब्जेक्ट को एक नए इंस्टेंस में कॉपी कर रहा था जहां मौजूदा ऑब्जेक्ट को बरकरार रखने के दौरान नया इंस्टेंस एक नए आईडी से सहेजा जाएगा। मुझे यह पता लगाना प्रतीत नहीं होता कि मौजूदा ऑब्जेक्ट को एक नए इंस्टेंस में कैसे कॉपी किया जाए, बिना किसी नए इंस्टेंस फ़ील्ड को मैन्युअल रूप से सेट किया जाए। क्या किसी को ऐसा करने का एक आसान तरीका पता है?नए ऑब्जेक्ट आईडी
उत्तर
मैं भी हाइबरनेट के साथ काम कर रहा हूं और मुझे वही आवश्यकता मिल गई है। मैंने जो किया उसका पालन Cloneable
को लागू करना था। नीचे एक कोड उदाहरण है कि इसे कैसे करें।
class Person implements Cloneable {
private String firstName;
private String lastName;
public Object clone() {
Person obj = new Person();
obj.setFirstName(this.firstName);
obj.setLastName(this.lastName);
return obj;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
या आप प्रतिबिंब आधारित समाधान पर जा सकते हैं लेकिन मैं इसकी अनुशंसा नहीं करूंगा। अधिक जानकारी के लिए यह website देखें।
आप ऑब्जेक्ट को क्लोन कर सकते हैं और आईडी को मिटा सकते हैं और उसे वापस सहेज सकते हैं ताकि एक नया आईडी असाइन किया जा सके।
तो
Person person = EmployeeDAO.get(empId);
Person newPersonCopy = person.createCopyWithNoId()
EmployeeDAO.add(newPersonCopy);
इस मामले
createCopyWithNoId() में
वस्तु का क्लोन बना सकते हैं और शून्य पर ईद क्षेत्र स्थापित करेगा। जब आप अब नया क्लोन जोड़ते हैं तो हाइबरनेट इंजन इसे एक नई वस्तु के रूप में देखेगा और डेटाबेस एक नई प्राथमिक कुंजी असाइन करेगा।
कृपया ध्यान दें कि मैंने विधि क्लोन को कॉल करने से परहेज किया है क्योंकि जो बाहर आता है वह सटीक क्लोन नहीं है क्योंकि हम आईडी को मैनिपुलेट करते हैं (इसे शून्य बनाते हैं);
जाने का एक और तरीका एक ऐसे निर्माता को जोड़ना होगा जो किसी व्यक्ति के ऑब्जेक्ट में लिया गया हो और एक नई ऑब्जेक्ट बनाया लेकिन बस आईडी फ़ील्ड को शून्य के डिफ़ॉल्ट मान पर छोड़कर सेट नहीं किया। फिर आप डीएओ का उपयोग जारी रखते हैं।
साथ सबसे प्रभावी तरीके से उपयोग किया जा सकता तो आप इस पर थोड़ा और अधिक विस्तृत किया जा सका। मैं पूरी तरह से यकीन नहीं कर रहा हूँ किCopyWithNoId क्या है। मुझे लगता है कि वह जगह है जहां मुझे स्पष्टीकरण की आवश्यकता है। इसके अलावा, क्या यह एक गहरा क्लोन कर सकता है? –
या तो यदि आप ऑब्जेक्ट क्लोन करने योग्य हैं तो आप क्लोन कर सकते हैं या आप उस ऑब्जेक्ट के लिए एक विधि/कन्स्ट्रक्टर को परिभाषित कर सकते हैं, जिसे आप प्रतिलिपि बनाना चाहते हैं और आप जो कुछ भी चाहते हैं उसे प्रतिलिपि बनाना चाहते हैं, एक नए उदाहरण में और इसे वापस कर सकते हैं।
बस ऑब्जेक्ट को पुनर्प्राप्त करें, इसे अलग करें, आईडी को शून्य पर सेट करें और इसे जारी रखें।
MyEntity clone = entityManager.find(MyEntity.class, ID);
entityManager.detach(clone);
clone.setId(null);
entityManager.persist(clone);
अपने वस्तु oneToMany रिश्ते हैं, तो आप सभी बच्चों, लेकिन अपने माता पिता वस्तु आईडी (persist
कॉल के बाद उत्पन्न) अशक्त के बजाय स्थापित करने के लिए आपरेशन को दोहराने के लिए होगा।
बेशक आपको अपने OneToMany रिश्तों पर CASCADE persist
को हटाना होगा क्योंकि अन्यथा आपका लगातार डीबी या एफके बाधा विफलताओं में सभी बच्चों के डुप्लिकेट बनाएगा।
यह –
के रूप में काम करता है मुझे उम्मीद है कि यह काम करने के लिए दृष्टिकोण लेकिन .... आश्चर्य, आश्चर्य है कि मैं एक अपवाद org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke() एक बच्चे पर आईडी – Legna
को फिर से सेट करने का प्रयास करते समय? क्या आपने इसे बीफ़ को अलग किया अयस्क? (अलग-अलग नहीं है जब तक कि कैस्केड टाइप = DETACH) – Gab
निम्नलिखित लिंक पर एक नज़र डालें। सबसे शक्तिशाली क्लोनिंग तंत्र में से एक है जो हाइबरनेट
http://thoughtfulsoftware.blogspot.in/2013/05/using-variable-depth-copy-to-prevent.html
- 1. कोर ऑब्जेक्ट आईडी बनाम स्थायी ऑब्जेक्ट आईडी
- 2. ऑटोमैपर एक ऑब्जेक्ट आईडी
- 3. ऑब्जेक्ट आईडी पहचान विशेषता
- 4. स्ट्रिंग को ऑब्जेक्ट आईडी
- 5. glsl fragmentshader ऑब्जेक्ट आईडी
- 6. ऑब्जेक्ट आईडी कैसे मुद्रित करें?
- 7. मोंगो डीबी ऑब्जेक्ट आईडी के
- 8. आईडी() द्वारा ऑब्जेक्ट प्राप्त करें?
- 9. विशिष्ट ऑब्जेक्ट आईडी से कोर डेटा ऑब्जेक्ट कैसे प्राप्त करें?
- 10. एक नए सहेजे गए backbone.js मॉडल के लिए आईडी
- 11. ऐप्पल डेवलपर ऐप पोर्टल अब नए बंडल बीज आईडी
- 12. नए
- 13. कोर डेटा में ऑटो-वर्धित ऑब्जेक्ट आईडी?
- 14. सिद्धांत 2, पास आईडी या ऑब्जेक्ट?
- 15. PHP में ऑब्जेक्ट आईडी कैसे खोजें?
- 16. कोर डेटा: कीपैथ "ऑब्जेक्ट आईडी" इकाई
- 17. Symfony2: लगातार ऑब्जेक्ट की आईडी प्राप्त करें
- 18. इकाई फ्रेमवर्क 4.1: मैं ऑब्जेक्ट आईडी
- 19. आईडी
- 20. आईडी, आईडी, या आईडी?
- 21. आईडी
- 22. "नए"
- 23. नए
- 24. नए
- 25. आईओएस पर नए उद्देश्य-सी ऑब्जेक्ट अक्षर कैसे सक्षम करें?
- 26. किसी मौजूदा ऑब्जेक्ट के लिए नए तत्व जोड़ें
- 27. ऑब्जेक्ट इनपुट स्ट्रीम - नए डेटा के लिए कैसे प्रतीक्षा करें?
- 28. जावास्क्रिप्ट: नए + कन्स्ट्रक्टर
- 29. हाइबरनेट आईडी
- 30. क्या यूआरएल में उपयोग करने के लिए आईडी (मोंगो से ऑब्जेक्ट आईडी) सुरक्षित हैं?
आप नेस्टेड टेबल जैसे कि एक टोमनी आदि कैसे संभालते हैं? मुझे डर था कि मुझे फिर से सभी ऑब्जेक्ट चर सेट करना होगा।:( –
मेरा मामला नेस्टेड ऑब्जेक्ट्स के बारे में नहीं था इसलिए मुझे उस समस्या का सामना नहीं हुआ ... मुझे डर है कि आपको गहरी प्रतिलिपि होगी ... हमेशा पीढ़ी होती है ... – Chan
क्या आप मुझे इंगित कर सकते हैं पीढ़ी के बारे में एक लेख के लिए? –