not allowed in read-only mode (FlushMode.NEVER) 解決

在用spring.net + Nhibernate進行數據庫訪問時回出現如下錯誤:

Write operations are not allowed in read-only mode (FlushMode.NEVER) - turn your Session into FlushMode.AUTO or remove 'readOnly' marker from transaction definition

至於產生錯誤的原因可以參考: http://www.diybl.com/course/3_program/java/javajs/20071018/77920.html

 

當然出現這個錯誤和保持一個Session有關係

我在web.xml裏添加

<add name="OpenSessionInView" type="Spring.Data.NHibernate.Support.OpenSessionInViewModule, Spring.Data.NHibernate12"/>

來確保一個次請求會話中保持使用一個數據會話連接.

那麼如何解決這個問題呢? 那就是採用spring.net的事物機制.

 

添加以下配置腳本

<object id="autoProxyCreator"
            type="Spring.Aop.Framework.AutoProxy.DefaultAdvisorAutoProxyCreator, Spring.Aop">
  </object>

  <!--事務顧問-->
  <object id="transactionAdvisor"
          type="Spring.Transaction.Interceptor.TransactionAttributeSourceAdvisor, Spring.Data">
    <property name="TransactionInterceptor" ref="transactionInterceptor"/>
  </object>

   
  <!--事務攔截器-->
  <object id="transactionInterceptor"
          type="Spring.Transaction.Interceptor.TransactionInterceptor, Spring.Data">
    <property name="TransactionManager" ref="HibernateTransactionManager"/>
     <!--note do not have converter from string to this property type registered-->
    <property name="TransactionAttributeSource" ref="attributeTransactionAttributeSource"/>
  </object>

 

  <object id="attributeTransactionAttributeSource"
          type="Spring.Transaction.Interceptor.AttributesTransactionAttributeSource, Spring.Data">
  </object>

 

然後在需要事務處理的代碼加上方法屬性。例如:

[Transaction(Spring.Transaction.TransactionPropagation.Required, ReadOnly = false)]
public void SaveOrUpdate(CompanyInfo info)
{
        dao.SaveOrUpdate(info);
}

發佈了35 篇原創文章 · 獲贊 2 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章