2011-01-10 27 views
20

我有一個在MySQL數據庫上使用Spring和Hibernate的應用程序。出於某種原因,由於最近幾天,每當我試着堅持我收到以下錯誤我的數據庫中的任何對象:爲什麼這個Hibernate MySQL連接是隻讀的?

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

我不能爲我的生命弄清楚爲什麼會發生。我的應用程序在幾天前運行良好。

我在我的applicationContext.xml文件配置一個SessionFactory對象是這樣的:

 <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文件看起來是這樣的:

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

我使用的是MySQL的/ j conenction版本5.1,休眠版本3.2,彈簧mvc 3.0.5

+0

配置看起來不錯。請添加一個受此影響的示例代碼。另外,如果您可以指定MySQL驅動程序的確切版本,那就太好了。 – jpkrohling 2011-01-10 16:15:44

+0

您是否在使用Transactional註釋?它是否設置爲@Transactional(readOnly = true) – 2011-01-10 17:45:38

回答

36

後約3小時可怕的調試現在我知道發生了什麼事情。我有一個服務級別的方法,我也有一個「周圍」的建議。服務級別的方法用@Transactional(readOnly=true)進行了註釋,但是,我的另一項服務在我的建議中是annotated with @Transactional(readOnly=false)

我的方面(或建議)與我的普通服務層使用相同的DAO對象,所以當我調用sessionFactory.getCurrenctSession()時,它會讓我回到爲我的只讀服務級方法創建的會話。現在,我必須重新設計。

相關問題