मेरे पास एक प्रश्न है। ये विधियां कहाँ गईं?हाइबरनेट में अस्थायी तालिकाओं का उपयोग करके रिकॉर्ड्स को कैसे हटाएं?
Dialect.supportsTemporaryTables();
Dialect.generateTemporaryTableName();
Dialect.dropTemporaryTableAfterUse();
Dialect.getDropTemporaryTableString();
मैं Dialect.java
के लिए Git इतिहास ब्राउज़ करने के लिए कोशिश की है, लेकिन कोई किस्मत। मैंने पाया कि MultiTableBulkIdStrategy
जैसे कुछ बनाया गया था लेकिन मुझे इसका उपयोग करने का कोई उदाहरण नहीं मिला।
बिंदु पर ... मेरे पास विरासत कोड है (हाइबरनेट 4.3.11 का उपयोग करके) जो अस्थायी तालिका का उपयोग कर एकाधिक तालिकाओं से बैच हटा रहा है। उन तालिकाओं में 1000 पंक्तियां हो सकती हैं, लेकिन भी 10 मिलियन पंक्तियां हो सकती हैं। तो बस यह सुनिश्चित करने के लिए कि मैं कुछ पागल डिलीट के साथ डीबी को मार नहीं पाता हूं, मैं temp टेबल बनाता हूं जहां मैंने (कुछ शर्त के साथ चुनिंदा क्वेरी का उपयोग करके) 1000 ids पर और फिर 4 टेबल से डेटा हटाने के लिए इस temp तालिका का उपयोग करें। यह चक्र के दौरान चल रहा है जब तक कि कुछ शर्त के आधार पर सभी डेटा हटाया नहीं जाता है। प्रत्येक चक्र के बाद लेनदेन किया जाता है।
इसे और अधिक जटिल बनाने के लिए इस कोड को शीर्ष पर चलाना है: mysql, mariadb, oracle, postgresql, sqlserver और h2।
यह ऊपर वर्णित विधियों के साथ देशी एसक्यूएल का उपयोग करके किया गया था। लेकिन मुझे यह नहीं पता कि इसे रीफैक्टर करने के लिए कैसे कोई रास्ता नहीं मिल रहा है।
मेरे पहली कोशिश क्वेरी का निर्माण करना था का उपयोग कर इस तरह का चयन नेस्ट: delete from TABLE where id in (select id from TABLE where CONDITION limit 1000)
लेकिन जैसा कि मैंने प्रत्येक हटा सकते हैं और limit
HQL में चुनिंदा नेस्ट में समर्थित नहीं है के लिए चयन क्वेरी अनेक बार चलाने के लिए है इस तरह से धीमी है।
कोई विचार या पॉइंटर्स?
धन्यवाद।
यदि उत्तर 'ठीक है, वे अभी चले गए हैं' तो क्या आप अधिक जानकारी में अपने उपयोग के मामले का वर्णन करेंगे ताकि अन्य आपकी समस्या के समाधान पर संभवतः टेम्प टेम्प के बिना सुझाव दे सकें? –
शायद यह आपकी मदद करेगा http://in.relation.to/2017/02/01/non- समकालीन-table-bulk-id-strategies/? – Ivan
https://github.com/grimsa/hibernate-single-table-bulk-id-strategy –