2017-12-08 27 views
15

मेरे पास एक प्रश्न है। ये विधियां कहाँ गईं?हाइबरनेट में अस्थायी तालिकाओं का उपयोग करके रिकॉर्ड्स को कैसे हटाएं?

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 में चुनिंदा नेस्ट में समर्थित नहीं है के लिए चयन क्वेरी अनेक बार चलाने के लिए है इस तरह से धीमी है।

कोई विचार या पॉइंटर्स?

धन्यवाद।

+1

यदि उत्तर 'ठीक है, वे अभी चले गए हैं' तो क्या आप अधिक जानकारी में अपने उपयोग के मामले का वर्णन करेंगे ताकि अन्य आपकी समस्या के समाधान पर संभवतः टेम्प टेम्प के बिना सुझाव दे सकें? –

+1

शायद यह आपकी मदद करेगा http://in.relation.to/2017/02/01/non- समकालीन-table-bulk-id-strategies/? – Ivan

+0

https://github.com/grimsa/hibernate-single-table-bulk-id-strategy –

उत्तर

4

विधियां version 4.3.11 में मौजूद थीं लेकिन version 5.0.0 में हटा दी गईं। ऐसा लगता है कि उन्हें बहिष्कृत करने के बजाए हटा दिया गया था - पृष्ठभूमि this Jira ticket पर है।

इस से उद्धृत करने के लिए:

दीर्घकालिक, मुझे लगता है कि सबसे अच्छा तरीका बोली विधि तालिका एक टुकड़ों फैशन में प्रस्तुत समर्थन करने के लिए और बनाने के लिए एक पूरी तरह से आत्म निहित हो MultiTableBulkIdStrategy इरादा दूर करने के लिए है अनुबंध।

विधियों को this commit में हटा दिया गया था।

तो ऐसा लगता है कि getDefaultMultiTableBulkIdStrategy() इन विधियों के लिए इच्छित प्रतिस्थापन है - लेकिन मैं इस बात पर पूरी तरह से स्पष्ट नहीं हूं कि वर्तमान में इसका कोई जवाडोक नहीं है। मान लीजिए कि आप इसे the source code से बाहर करने का प्रयास कर सकते हैं ... या यदि सब कुछ विफल हो जाता है, तो शायद Steve Ebersole से संपर्क करने का प्रयास करें, जिन्होंने परिवर्तन लागू किया था?

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