java.sql.SQLException:連接是只讀的。不允許導致數據修改的查詢


我的項目中

 

 

 service的實現類少了寫一個注解   : 只讀事務(@Transactional(readOnly = true)

應用場合:

       如果你一次執行單條查詢語句,則沒有必要啟用事務支持,數據庫默認支持SQL執行期間的讀一致性; 
       如果你一次執行多條查詢語句,例如統計查詢,報表查詢,在這種場景下,多條查詢SQL必須保證整體的讀一致性,否則,在前條SQL查詢之后,后條SQL查詢之前,數據被其他用戶改變,則該次整體的統計查詢將會出現讀數據不一致的狀態,此時,應該啟用事務支持。

怎樣設置:

  對於只讀查詢,可以指定事務類型為readonly,即只讀事務。
  由於只讀事務不存在數據的修改,因此數據庫將會為只讀事務提供一些優化手段,例如Oracle對於只讀事務,不啟動回滾段,不記錄回滾log。

(1)在JDBC中,指定只讀事務的辦法為: connection.setReadOnly(true);

(2)在Hibernate中,指定只讀事務的辦法為: session.setFlushMode(FlushMode.NEVER); 
此時,Hibernate也會為只讀事務提供Session方面的一些優化手段

(3)在Spring的Hibernate封裝中,指定只讀事務的辦法為: bean配置文件中,prop屬性增加“readOnly”
   或者用注解方式@Transactional(readOnly=true)
  【 if the transaction is marked as read-only, Spring will set the Hibernate Session’s flush mode to FLUSH_NEVER, 
  and will set the JDBC transaction to read-only】也就是說在Spring中設置只讀事務是利用上面兩種方式

 

  在將事務設置成只讀后,相當於將數據庫設置成只讀數據庫,此時若要進行寫的操作,會出現錯誤

 

 

 

 

 

 

 改:

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM