2011-01-03 6 views
7

हर किसी का कारण बनता है। मुझे मौजूदा पंक्तियों को तालिका में नए स्थानांतरित करने में समस्या है। मैं जेपीए और पोस्टग्रेएसक्यूएल डीबी का उपयोग करता हूं। मैं सभी मौजूदा पंक्तियों को हटाने की कोशिश कर रहा हूं और फिर नए बनाते हैं, लेकिन अपवाद प्राप्त करते हैं: org.postgresql.util.PSQLException: त्रुटि: डुप्लिकेट कुंजी मान अद्वितीय बाधा "user_destination_pk" का उल्लंघन करता है। ये सभी कार्य एकल जेटीए लेनदेन के अंदर हैं। ऐसा लगता है कि जेपीए डालने से पहले पंक्तियों को हटा नहीं देता है, लेकिन मुझे कोई अपवाद नहीं मिला है ... किसी भी मदद की सराहना की जाती है।मौजूदा पंक्तियों को नए लोगों के साथ बदलने से डुप्लिकेट कुंजी अपवाद

उत्तर

10

नई इकाइयों को सहेजने/जोड़ने से पहले हटाए जाने के लिए हाइबरनेट Session.flush() विधि को हटाएं (एसक्यूएल निष्पादित करें) का उपयोग करें।

+0

धन्यवाद अद्वितीय बाधा बना सकते हैं, मैं फ्लश के बारे में सोचा (है, लेकिन मुझे लगता है कि यह डीबी लेनदेन खत्म। क्या मैं सही हू? मैं यह हटाना नहीं चाहता हूं कि नई पंक्तियां अच्छी हैं। – damluar

+0

कॉलिंग फ्लश() लेनदेन को पूरा नहीं करता है (हालांकि लेनदेन करना पूरी तरह से फ्लश() करता है), यह सिर्फ हाइबरनेट को डीबी को सत्र के रूप में लाने के लिए एसक्यूएल निष्पादित करता है। – araqnid

+0

धन्यवाद, अब यह स्पष्ट है – damluar

0

आप) के रूप में deferrable initially deferred

+0

मैंने उस बारे में पहले भी सोचा लेकिन मुझे नहीं लगता कि इससे यहां मदद मिलेगी। विवरण से ऐसा लगता है कि यह वास्तव में जेपीए आवेषण भेजने से पहले हटा नहीं भेज रहा है। एकमात्र ऐसी स्थिति जहां यह मदद करेगी, जब जेपीए ** प्रविष्टियों को भेजने के बाद ** हटाएगा। –

+0

@a_horse_with_no_name हालांकि यह वही जेटीए लेनदेन के भीतर कोई फर्क नहीं पड़ता। –

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