AOP配置事務javax.persistence.TransactionRequiredException: no transaction is in progress


事務配置如下:

serviceimpl類的方法

報錯

javax.persistence.TransactionRequiredException: no transaction is in progress
	at org.hibernate.internal.AbstractSharedSessionContract.checkTransactionNeededForUpdateOperation(AbstractSharedSessionContract.java:409)
	at org.hibernate.internal.SessionImpl.checkTransactionNeededForUpdateOperation(SessionImpl.java:3602)
	at org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1483)
	at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1479)  

 說明:serviceimpl的方法名是find*();已經在事務中配置為<tx:method name="find*" propagation="SUPPORTS"/> 

            SUPPORTS:支持當前事務,如果當前沒有事務,就以非事務方式執行。 

            不明白為什么還是會報javax.persistence.TransactionRequiredException: no transaction is in progress

             后來將<tx:method name="find*" propagation="SUPPORTS"/> 改為<tx:method name="find*" propagation="SUPPORTS" read-only="true"/>問題解決

            read-only應用場合:

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

 


免責聲明!

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



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