3.只讀事務@Transactional(readOnly = true)


只讀事務@Transactional(readOnly = true)

 

    定義 從設置的時間點(時間點beta)開始到事務結束的過程中,該事務將看不見其他事務所提交的數據,即查詢中不會出現別人在beta之后提交的數據。

    應用場合 對於一個函數,如果執行的只是單條查詢語句,則沒有必要啟用事務支持,數據庫默認支持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”;
    (4)使用注解 @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】,在將事務設置成只讀后,相當於將數據庫設置成只讀數據庫,此時若要進行寫的操作,會出現錯誤。


免責聲明!

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



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