Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

हाइबरनेट @SQLInsert और डुप्लिकेट कुंजी पर

सही उत्तर निम्नलिखित कथन का उपयोग करना होगा:

INSERT INTO table (colA, colB) VALUES (?,?) ON DUPLICATE KEY 
UPDATE colB = VALUES(colB);

हालाँकि तब समस्या यह प्रकट होती है कि एक बार अपडेट स्टेटमेंट करने के बाद, हाइबरनेट को ऑटो-इंक्रीमेंट वैल्यू वापस नहीं मिली।

मुझे निम्नलिखित ब्लॉग पोस्ट मिली (http://www.jroller.com/mmatthews/entry/ get_hibernate_and_mysql_s ) और क्वेरी को निम्न में संशोधित किया:

INSERT INTO table (colA, colB) VALUES (?,?) ON DUPLICATE KEY 
UPDATE colB = VALUES(colB), id = LAST_INSERT_ID(id);

जो अंत में काम करता है।

इस दृष्टिकोण के साथ एक अनसुलझी समस्या यह है कि एक ही लेन-देन के भीतर समान दो संस्थाओं का सम्मिलन काम नहीं करता है। यहां तक ​​​​कि अगर दूसरी प्रविष्टि सही अद्यतन का कारण बनती है, तो एम 2 इकाई-उदाहरणों के साथ समाप्त हो जाएगा जो एक ही डेटाबेस पंक्ति का प्रतिनिधित्व करते हैं - जिसकी अनुमति नहीं है।

इसे हल करने के लिए, किसी को केवल यह सुनिश्चित करने की आवश्यकता है कि आप 2 संस्थाओं को सम्मिलित न करें जो उनकी बाधाओं के कारण समान रूप से प्रदान की जाती हैं। (मैंने समान/हैशकोड के लिए समान तर्क का उपयोग समग्र-अद्वितीय-कुंजी बाधा के रूप में किया था, इसलिए मैं बैच-आवेषण करते समय ऐसे डुप्लिकेट को समाप्त करने में सक्षम हूं)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. बिना रिपीट किए एक-एक करके रिकॉर्ड कैसे चुनें?

  2. MySQL सीएसवी स्ट्रिंग में फ़ील्ड का चयन करें

  3. स्प्रिंग जेपीए में सटीक मिलान रिकॉर्ड कैसे प्राप्त करें @Query

  4. पंक्ति निर्माण और अंतिम संशोधन के लिए टाइमस्टैम्प

  5. MySQL कॉलम में न्यूनतम अप्रयुक्त मान प्राप्त करें