2012-05-11 47 views
3

以下是我的場景: 我的應用程序開始一個事務,插入/更新,然後調用Web服務。 Web服務可能需要很長時間來處理請求。有沒有什麼辦法在我的hibernate層中爲我的會話/事務配置一個超時時間,這樣我可以優雅地關閉會話。 P.S. - 或者,我也可以看看爲我的Web服務調用配置超時。假設我沒有那個自由。有什麼我可以在休眠做或者我需要寫我自己的自定義邏輯(使用線程連接結構)來實現這些在休眠時設置超時會話或事務

回答

3

您可以set timeout在特定查詢的級別,或者如果您使用JPA的EntityManager的,你可以添加query hint 。理論上說,Hibernate默認使用樂觀鎖(如果數據庫事務隔離級別符合這個要求),所以記錄在寫或讀時永遠不會被鎖定。因此,即使長期持續的交易也不應該嚴重損害業績。

如果您使用的是悲觀鎖,您可以在Hibernate Session中爲它們設置超時時間。看看Session.LockRequest

+0

設置超時和查詢提示wouldnt工作在我的情況下,因爲我的插入或更新查詢將得到執行,但我不能提交tran因爲Web服務調用沒有返回.LockRequest解決另一個目的,我試圖獲取一行由於從另一個tran更新而被鎖定 – Cshah