2011-01-10 19 views
20

Bir MySQL veritabanında Hazırda Hazırda Bekletme özelliğini kullanarak bir uygulamam var. bu oluyor nedenNeden bu Hazırda Beklet MySQL Bağlantısı salt okunur?

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

beni hayat çözemiyorum için: Nedense, son birkaç gün itibariyle, her zaman aşağıdaki hatayı alıyorum benim veritabanına herhangi nesneleri kalıcı deneyin . Başvurum birkaç gün önce iyi çalışıyordu.

Bu gibi benim applicationContext.xml dosyasındaki bir SessionFactory nesneyi yapılandırarak ediyorum: Ben bir mysql kullanıyorum

<?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> 

benim hibernate.cfg.xml dosyası şuna benzer/j bağlantı sürümü 5.1, hazırda bir sürüm 3.2, yay mvc 3.0.5

+0

Yapılandırma iyi görünüyor. Lütfen, bundan etkilenen örnek bir kod ekleyin. Ayrıca, MySQL sürücüsünün tam sürümünü belirtebilirseniz iyi olurdu. – jpkrohling

+0

İşlemsel ek açıklama kullanıyor musunuz? @Transactional (readOnly = true) olarak ayarlandı –

+5

3 saat boyunca korkunç hata ayıklamadan sonra neler olduğunu biliyorum. Benim de bir "etrafında" tavsiyem var hizmet düzeyinde bir yöntem var. Hizmet seviyesi yöntemi @Transactional (readOnly = true) ile açıklanmıştır, ancak, [Transactional (readOnly = false) ile açıklamalı olarak benim tavsiyemde başka bir hizmetim var. Benim yönüm (veya öneri), normal hizmet katmam olarak aynı DAO nesnelerini kullanıyor, bu yüzden sessionFactory.getCurrenctSession() işlevini çağırdığımda, Salt Okunur Hizmet düzeyi yöntemim için oluşturulan oturumu geri veriyor. Şimdi yeniden mimarım olmalı. Yanıtlarınız için teşekkürler! –

cevap

36

sonra davanız olduğundan emin olun. Benim de bir "etrafında" tavsiyem var hizmet düzeyinde bir yöntem var. Servis seviyesi yöntemi @Transactional(readOnly=true) ile açıklanmıştır, ancak tavsiyemde annotated with @Transactional(readOnly=false) olan başka bir hizmetim var.

Durumum (veya öneri), normal hizmet katmanımla aynı DAO nesnelerini kullanıyor, bu yüzden sessionFactory.getCurrenctSession()'u aradığımda, Salt Okunur Hizmet düzeyi yöntemim için oluşturulan oturumu geri veriyor. Şimdi yeniden mimarım olmalı.

+2

Bu aynı senaryoya rastladık. Biz readOnly = true yöntemi, M1, başka bir yöntem M2, bir çağrı sarılmış vardı, readOnly = false oldu. İlginçtir, sadece bunu anlayamadığım bir süredir görüyoruz. – Bradley

0

Bu, 5.1.6:sürümüne kadar olan sürümlerde MySQL Connector/J'de bulunan hatalara benziyor http://bugs.mysql.com/bug.php?id=38747

10 sürümü korkunç hata ayıklama yaklaşık 3 saat ben şimdi neler olup bittiğini bilmek en azından 5.1.7

İlgili konular