2011-01-10 9 views
20

मेरे पास एक MySQL डेटाबेस पर स्प्रिंग विद हाइबरनेट का उपयोग कर एक एप्लिकेशन है। क्यों यह हो रहा हैयह हाइबरनेट MySQL कनेक्शन केवल पढ़ने के लिए क्यों है?

java.sql.SQLException: Connection is read-only. Queries leading to data modification are not allowed.*

मैं के लिए मुझे के जीवन को समझ नहीं सकता: किसी कारण के लिए, पिछले कुछ दिनों के रूप में, कभी भी मुझे लगता है मैं निम्न त्रुटि हो रही है मेरी डेटाबेस के लिए किसी भी वस्तुओं बने रहने की कोशिश । मेरा आवेदन कुछ दिन पहले ठीक काम कर रहा था।

मैं इस तरह मेरी applicationContext.xml फ़ाइल में एक SessionFactory वस्तु को विन्यस्त कर रहा हूँ: मैं एक mysql का उपयोग कर रहा

<?xml version='1.0' encoding='utf-8'?> 

<!DOCTYPE hibernate-configuration PUBLIC 
     "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
     "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
    <session-factory> 
     <!-- Database connection settings --> 
     <property name="connection.driver_class">com.mysql.jdbc.Driver</property> 
     <property name="connection.url">jdbc:mysql://{url to db}:3306/{db name}</property> 
     <property name="connection.username">{db user}</property> 
     <property name="connection.password">{db password}</property> 
     <!-- JDBC connection pool (use the built-in) --> 
     <property name="connection.pool_size">10</property> 
     <!-- SQL dialect --> 
     <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property> 
     <!-- Enable Hibernate's automatic session context management > 
     <property name="current_session_context_class">thread</property--> 
     <!-- Disable the second-level cache --> 
     <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> 
     <!-- Echo all executed SQL to stdout --> 
     <property name="show_sql">true</property> 
     <!-- Drop and re-create the database schema on startup --> 
     <property name="hbm2ddl.auto">update</property> 

    </session-factory> 
</hibernate-configuration> 

:

 <bean id="sessionFactory" lass="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
     <property name="configLocation" 
value="classpath:/hibernate.cfg.xml"/> 
     <property name="packagesToScan"> 
      <list> 
       <value>com.domain.domainObjects</value> 
      </list> 
     </property> 
    </bean> 

मेरी hibernate.cfg.xml फ़ाइल इस तरह दिखता है/जे कनेक्शन संस्करण 5.1, हाइबरनेट संस्करण 3.2, वसंत एमवीसी 3.0.5

+0

कॉन्फ़िगरेशन अच्छा दिखता है। कृपया, एक नमूना कोड भी जोड़ें जो इससे प्रभावित होता है। साथ ही, यह अच्छा होगा अगर आप MySQL ड्राइवर का सटीक संस्करण निर्दिष्ट कर सकते हैं। – jpkrohling

+0

क्या आप लेनदेन संबंधी एनोटेशन का उपयोग कर रहे हैं? क्या यह @Transactional पर सेट है (readOnly = true) –

+5

भयानक डीबगिंग के लगभग 3 घंटे बाद मुझे पता है कि क्या हो रहा है। मेरे पास एक सेवा-स्तरीय विधि है जिसमें मेरे पास "आसपास" सलाह भी है। सेवा-स्तरीय विधि @Transactional (readOnly = true) के साथ एनोटेट की गई है, हालांकि, मेरी सलाह में मेरी एक और सेवा है जिसे @Transactional (readOnly = false) के साथ एनोटेट किया गया था। मेरा पहलू (या सलाह) एक ही डीएओ ऑब्जेक्ट्स का उपयोग मेरी सामान्य सेवा-परत के रूप में कर रहा है, इसलिए जब मैंने sessionFactory.getCurrenctSession() को कॉल किया तो यह मुझे उस सत्र को वापस दे रहा है जो मेरी केवल-पढ़ने सेवा-स्तर विधि के लिए बनाया गया था। अब, मुझे फिर से वास्तुकार करना है। आपके प्रतिक्रियाओं के लिए धन्यवाद! –

उत्तर

36

के बाद भयानक डीबगिंग के लगभग 3 घंटे अब मैं जानता क्या हो रहा है अपने मामले है होना सुनिश्चित करें। मेरे पास एक सेवा-स्तरीय विधि है जिसमें मेरे पास "आसपास" सलाह भी है। सेवा-स्तर विधि @Transactional(readOnly=true) के साथ एनोटेटेड है, हालांकि, मेरी सलाह में मेरी एक और सेवा है जो annotated with @Transactional(readOnly=false) थी।

मेरा पहलू (या सलाह) मेरी सामान्य सेवा-परत के रूप में एक ही डीएओ ऑब्जेक्ट्स का उपयोग कर रहा है, इसलिए जब मैंने sessionFactory.getCurrenctSession() कहा तो यह मुझे उस सत्र को वापस दे रहा है जो मेरी केवल-पढ़ने सेवा-स्तर विधि के लिए बनाया गया था। अब, मुझे फिर से वास्तुकार करना है।

+2

हम इस सटीक परिदृश्य में भाग गए। हमारे पास केवल पढ़ने के लिए एक सही विधि थी, एम 1, जिसने एक अन्य विधि एम 2 पर एक कॉल लपेट लिया था, जिसे पढ़ा गया था केवल = झूठा। दिलचस्प बात यह है कि हम केवल कुछ समय देख रहे हैं जिसे मैं काफी समझ नहीं सकता। – Bradley

0

ऐसा लगता है कि उनके पास MySQL कनेक्टर/जे में 5.1.6:तक संस्करणों के लिए बग की तरह दिखता है 10 http://bugs.mysql.com/bug.php?id=38747

संस्करण में कम से कम 5.1.7

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