vickzhu

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            151 隨筆 :: 0 文章 :: 34 評論 :: 0 Trackbacks
          <2008年12月>
          30123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          常用鏈接

          留言簿(6)

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          錯誤代碼:
          org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER) - turn your Session into FlushMode.AUTO or remove 'readOnly' marker from transaction definition
          錯誤原因:
          OpenSessionInViewFilter在getSession的時候,會把獲取回來的session的flush mode 設為FlushMode.NEVER。然后把該sessionFactory綁定到TransactionSynchronizationManager,使request的整個過程都使用同一個session,在請求過后再解除該sessionFactory的綁定,最后closeSessionIfNecessary根據該session是否已和transaction綁定來決定是否關閉session。在這個過程中,若HibernateTemplate 發現自當前session有不是readOnly的transaction,就會獲取到FlushMode.AUTO Session,使方法擁有寫權限。
          也即是,如果有不是readOnly的transaction就可以由Flush.NEVER轉為Flush.AUTO,擁有insert,update,delete操作權限,如果沒有transaction,并且沒有另外人為地設flush model的話,則doFilter的整個過程都是Flush.NEVER。所以受transaction保護的方法有寫權限,沒受保護的則沒有。
          參考文章:
          http://calvin.blog.javascud.org/post/46.htm
          解決辦法:
          采用spring的事務聲明,使方法受transaction控制
          <bean id="baseTransaction"
          class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
          abstract="true">
          <property name="transactionManager" ref="transactionManager"/>
          <property name="proxyTargetClass" value="true"/>
          <property name="transactionAttributes">
          <props>
          <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
          <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
          <prop key="load*">PROPAGATION_REQUIRED,readOnly</prop>
          <prop key="save*">PROPAGATION_REQUIRED</prop>
          <prop key="add*">PROPAGATION_REQUIRED</prop>
          <prop key="update*">PROPAGATION_REQUIRED</prop>
          <prop key="remove*">PROPAGATION_REQUIRED</prop>
          </props>
          </property>
          </bean>
              <bean id="userService" parent="baseTransaction">
          <property name="target">
          <bean class="com.phopesoft.security.service.impl.UserServiceImpl"/>
          </property>
          </bean>

          posted on 2008-12-11 11:20 筱 筱 閱讀(446) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 浪卡子县| 天全县| 镇沅| 嘉荫县| 扎兰屯市| 金堂县| 永泰县| 巴东县| 定边县| 三门县| 马鞍山市| 平邑县| 东港市| 汪清县| 舒兰市| 清原| 沧州市| 甘肃省| 田东县| 将乐县| 临安市| 苗栗县| 潜江市| 靖宇县| 博乐市| 桐柏县| 新乐市| 铅山县| 囊谦县| 乌兰浩特市| 南皮县| 方城县| 名山县| 晋城| 肥东县| 肇庆市| 普宁市| 永川市| 琼结县| 夏河县| 石嘴山市|