2014-10-20 22 views
5

मेरे पास एक ताजा बनाई गई इकाई है (अलग है क्योंकि अभी तक डीबी में सहेजा नहीं गया है)। इस इकाई में एक और इकाई है जो डीबी में पहले से मौजूद है (लेकिन अलग भी है)। इस प्रकार, मैं इसे संग्रहीत करने के लिए em.merge(myNewEntity) का उपयोग करूंगा।विलय के बाद इकाई जेपीए आईडी प्राप्त करें?

यदि मैं नई बनाई गई आईडी प्राप्त करना चाहता हूं, तो मैं बाद में em.flush() का उपयोग करूंगा। फिर मैं myNewEntity.getId() का आह्वान करता हूं। persist के साथ मुझे डीबी/जेपीए द्वारा जेनरेट की गई आईडी प्राप्त होती है। merge के साथ, यह नहीं है। ऑब्जेक्ट में आईडी null बनी हुई है। ऐसा क्यों है?

+0

इस हाइबरनेट है? क्रिस्टल बॉल में – Leo

उत्तर

13

चूंकि आपने कोड प्रदान नहीं किया है, इसलिए मैं क्रिस्टल बॉल का प्रयास करूंगा।

merge ऑपरेशन का परिणाम persist ऑपरेशन के समान नहीं है - merge पर पारित इकाई प्रबंधित नहीं होती है। इसके बजाय, इकाई की एक प्रबंधित प्रति बनाई और लौटा दी गई है। यही कारण है कि मूल नई इकाई को एक आईडी नहीं मिलेगी। तो

em.merge(newEntity); 
Long id = newEntity.getId(); 

के बजाय यह होना चाहिए

managedEntity = em.merge(newEntity); 
Long id = managedEntity.getId(); 
+0

आसान अनुमान, है ना? हालांकि, धन्यवाद। जैसा कि आपने प्रस्तावित किया है, यह दस्तावेज और काम करता है। – feder

+0

:) अच्छा, आपका स्वागत है – kostja

संबंधित मुद्दे