我使用Spring與Hibernate。我有一些實際上不需要事務的查詢,但是我使用了一個查詢,因爲它爲我執行會話管理。沒有做我自己的會話管理,做這些非事務性讀取查詢的正確方法是什麼?對於Spring中的只讀查詢,@Transactional(readOnly = true)的替代方法是什麼?
1
A
回答
4
我認爲@Transaction(readOnly = true)是正確的做法。這不會創建新的/額外的物理事務,因此不應該有任何開銷來使用它。它將使用已經爲請求設置的事務。每個Hibernate文檔:
...實際上,每個SQL語句,無論是查詢還是DML,都必須在數據庫事務中執行。在數據庫事務之外不能與數據庫進行通信。 (請注意,有這樣的事情只讀事務,可以用來改善清理時間在數據庫引擎如果沒有足夠的智慧來優化自己的業務。)
https://community.jboss.org/wiki/SessionsAndTransactions#Transactions
1
有如果沒有與數據庫的交易(沒錯,但是驅動程序支持NO_TRANSACTION模式,例如DB2驅動程序是一種罕見的情況),您無法工作。此外,驅動程序和數據庫可能不支持只讀事務(如Oracle)。所以即使底層連接設置爲只讀模式,這並不意味着它會起作用。
在這種情況下唯一確定只讀標誌的是它將Hibernate的flush模式設置爲MANUAL。這意味着Hibernate不會與數據庫同步,除非發出對Session#flush()的顯式調用。所以在交易結束時不會發生髒檢查和插入/更新/選擇。
有關交易管理的更多精確信息,您可以查看org.springframework.orm.hibernate3.HibernateTransactionManager#doBegin()
方法。
相關問題
- 1. Spring - 通過@Transactional(readOnly = true)方法編寫的內部方法
- 2. Spring:@Transactional with readonly = true not call conn.setReadOnly(true)
- 3. 使用@Transactional(readOnly = true)有什麼好處?
- 4. Spring @Transactional註釋的方法是否覆蓋了@Transactional(readOnly = true)方法(如果在其中調用的話)?
- 5. Spring @Transactional只讀
- 6. Spring @Transactional只讀傳播
- 7. 對於計算量大的查詢,find_by_sql的替代方法是什麼?
- 8. Spring @Transactional的替代配置
- 9. Python中的替代方法是什麼?
- 10. ASP.NET中ReadOnly = true和TextBox1.Attributes.Add(「readonly」,「readonly」)有什麼區別?
- 11. Response.Redirect()asp.net的替代方法是什麼?
- 12. 對於C#4.0中昂貴的Enum.IsDefined(),有什麼替代方法?
- 13. Spring @Transactional註釋的嚴格替代
- 14. session_register($ var)的替代方法是什麼?
- 15. typeFactory.arrayType(xxx)的替代方法是什麼?
- 16. Spring @Transactional註釋中的readOnly屬性的適當位置
- 17. 什麼是用於sql循環的遊標的替代方法?
- 18. 在Spring中使用XML中的Qualifier批註的替代方法是什麼?
- 19. android的替代方法是什麼:代碼中的條目是什麼?
- 20. J2ME中String.Contains()方法的替代方法是什麼?
- 21. org.springframework.beans.factory.annotation.Value的替代方法不是基於Spring的
- 22. 什麼是替代方法`__call`
- 23. 棄用com.apple.eawt.ApplicationListener的替代方法有什麼替代方法
- 24. 外套的替代方案是什麼?
- 25. 此查詢的替代方法?
- 26. 什麼是Struts 1.3的替代方案
- 27. 爲什麼Spring的@Transactional幫助性能
- 28. 什麼是ADO.NET的替代方法,但在C#中用於讀取Excel文件的優雅方式
- 29. 基於地理參數查詢的最佳方法是什麼
- 30. Tensorflow版本0.12中的tf.Variable.ref()的替代方法是什麼?