簡體   English   中英

什么時候在Spring中使用Hibernate的事務?

[英]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*查詢有效嗎?
因為,據我所知,使用事務應該像CREATEUPDATEDELETE和這樣的查詢一樣。
我在這里錯過了什么嗎?

使用事務在某種程度上取決於要求。

顯然,在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM