[英]When to use transactions in Spring with Hibernate?
升級我的項目我在這里考慮交易。
好吧,問題是我不太確定我何時應該在Spring中使用 Hibernate查詢的事務 。
並不是說我完全不明白什么是交易,我想我也是,但是
我是否需要僅為設置read-only
屬性的get*
類型查詢使用事務?
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!-- all methods starting with 'get' are read-only -->
<tx:method name="get*" read-only="true" />
<!-- other methods use the default transaction settings -->
<tx:method name="*" />
</tx:attributes>
</tx:advice>
這對get*
查詢有效嗎?
因為,據我所知,使用事務應該像CREATE
, UPDATE
, DELETE
和這樣的查詢一樣。
我在這里錯過了什么嗎?
使用事務在某種程度上取決於要求。
顯然,在UPDATE和DELETE操作上使用事務是有意義的。 例如,如果您需要鎖定記錄以使另一個線程/請求不會更改讀取,則在SELECT語句上使用事務也很有用。 這通常是業務要求。
在我們公司,我們在事務中包裝所有語句(即SELECT,UPDATE,DELETE)。
此外,除數據級別外,事務管理確實更適合於另一層。 通常,交易將符合業務要求。 例如,如果要求是將錢存入帳戶,則應使用某些更高級別的類/代碼將整個方法標記為事務性,因為該特定方法需要作為一個單元完成(因為可能存在多個數據庫)調用)。
Spring對事務管理有很多話要說。
一個好的規則是在DAO之上的應用程序級別管理事務。 這樣,如果你有一個數據訪問操作A,有時需要在自己的事務中執行,有時應該加入現有的事務,你就不必跳過箍。 將此方法與通過AOP管理事務(和Hibernate會話)相結合,並觀察您的代碼變得更易理解和可維護。
要回答有關吸氣劑的具體問題:
如果您使用readOnly為true的AOP事務, 並且正確地將JPA方言設置為hibernate,則Spring會將您的Hibernate Session置於無刷新模式。 通過消除不必要的臟檢查,這可以為大批量操作帶來顯着的性能改進。 所以在這方面是值得的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.