2012-07-28 63 views
0

我們有一個servlet來處理許多併發請求,有時候一些請求會拋出異常。只見從休眠指導這樣的警告:Hibernate中的事務每會話或每事務查詢模式?

「如果Session拋出異常,包括任何的SQLException, 立即回滾數據庫事務,調用Session.close() ,丟棄該Session實例。」

在我的真實場景中,請求已經對數據庫進行了許多重要更改,當我們發現異常時,我們必須回滾之前所做的所有更改。

因此,我們似乎必須實現事務每請求模式,而不是事務每查詢,以確保所有更改都將被回滾。

是嗎?

回答

0

它取決於你想要什麼,但是,一般來說,你希望一個事務處理一個請求的生命週期,並且你希望該請求的所有數據庫操作都能參與到這個事務中。通常,這也意味着有一個會話綁定到請求。

+0

這種模式的性能和併發環境中的可伸縮性如何?我發現每筆交易都會有很多查詢。但是Hibernate指南說: 「爲了減少數據庫中的鎖爭用,數據庫事務必須儘可能短。」 – QuangHD 2012-07-28 11:31:55