2011-03-10 4 views
8

मेरे पास मुख्य धागा है जो धागे # 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

क्या आप एक साथ कई धागे से एक कनेक्शन का उपयोग कर रहे हैं? –

+0

हाँ, यह सही है। थ्रेड # 1 सत्र बनाता है जो डीबी कनेक्शन खोलता है, और थ्रेड # 2 उसी सत्र और कनेक्शन का उपयोग करता है। थ्रेड # 1 अपडेट करने के लिए उस कनेक्शन के भीतर नए लेन-देन बनाएगा, जबकि थ्रेड # 2 केवल कनेक्शन को जीवित रखने के लिए डीबी से चयन 1 करता है। – czer

उत्तर

5

भले ही मुझे लगता है कि आपको हाइबरनेट का उपयोग करने के तरीके पर गंभीरता से पुनर्विचार करना चाहिए, तो आप अपने यूआरएल में जेडीबीसी ड्राइवर को आराम AutoCommit पैरामीटर जोड़कर इस समस्या को बाईपास कर सकते हैं।

http://dev.mysql.com/doc/refman/5.0/en/connector-j-reference-configuration-properties.html

3

एक blog में जवाब है, समाधान उद्धरण पाया:

Setting the attribute relaxAutoCommit=true in the jdbc url we solved our problem.

jdbc:mysql://dbserver/database?rewriteBatchedStatements=true&relaxAutoCommit=true 

बेशक ब्लॉग एक और स्थिति में है, बस "rewriteBatchedStatements = सच" भाग को छोड़

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