मेरे पास मुख्य धागा है जो धागे # 2 को फैलाता है जो मुख्य धागे में समान हाइबरनेट सत्र का उपयोग करता है। थ्रेड # 2 मुख्य थ्रेड से लंबी चल रही प्रक्रिया के कारण बस डीबी कनेक्शन को जीवित रखने के लिए हर कुछ मिनट में "चयन 1" करता है। एक बार मुख्य थ्रेड/प्रसंस्करण w किया जाता है, यह एक प्रतिबद्ध कॉल, लेकिन मैं त्रुटि मिलती है:जेडीबीसी प्रतिबद्धता विफल रही, autocommit = true जब प्रतिबद्ध कॉलिंग। Multithreaded हाइबरनेट सत्र किसी भी तरह autocommit बदल रहा है?
Caused by: org.hibernate.TransactionException: JDBC commit failed
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:161)
at org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:655)
... 5 more
Caused by: java.sql.SQLException: Can't call commit when autocommit=true
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:930)
at com.mysql.jdbc.ConnectionImpl.commit(ConnectionImpl.java:1602)
at org.hibernate.transaction.JDBCTransaction.commitAndResetAutoCommit(JDBCTransaction.java:170)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:146)
... 6 more
मुख्य थ्रेड के भीतर, यह आंतरिक लेनदेन जो सफलतापूर्वक प्रतिबद्ध हैं बनाता है, जब यह करता है यह सिर्फ बाहरी लेन-देन है जो इस त्रुटि को फेंकता है। मैं नहीं देखता कि autocommit बूलियन क्या बदल सकता है। कनेक्शन को जीवित रखने के लिए मैंने दूसरे धागे को पेश करने से पहले, यह त्रुटि कभी नहीं हुई थी।
क्या आप एक साथ कई धागे से एक कनेक्शन का उपयोग कर रहे हैं? –
हाँ, यह सही है। थ्रेड # 1 सत्र बनाता है जो डीबी कनेक्शन खोलता है, और थ्रेड # 2 उसी सत्र और कनेक्शन का उपयोग करता है। थ्रेड # 1 अपडेट करने के लिए उस कनेक्शन के भीतर नए लेन-देन बनाएगा, जबकि थ्रेड # 2 केवल कनेक्शन को जीवित रखने के लिए डीबी से चयन 1 करता है। – czer