簡體   English   中英

Spring MVC 和 Hibernate 每個請求的單個事務

[英]Single transaction per request with Spring MVC and Hibernate

我想使用 Spring MVC 和 Hibernate。 我不想在所有控制器方法上使用服務層或@Transactional屬性(或者,我希望 Spring 將它們全部視為事務性的)。 所以我想在控制器方法開始使用數據庫時啟動事務,並在控制器方法返回 ViewAndModel 或回滾事務時提交事務,如果發生任何錯誤。 我還希望視圖支持延遲休眠加載,例如,如果 html 模板請求,則在自動提交模式下選擇數據。

我知道最佳實踐涉及使用@Transactional屬性創建一個單獨的服務層,但我的應用程序不會從這種額外的復雜性中受益,我想盡可能地簡化代碼。

我了解到OpenSessionInViewInterceptor允許在視圖中繼續使用休眠會話,因此這可能解決了我的第二個要求。 但是如何使所有控制器方法都具有事務性?

理想情況下,如果我需要,我想要一種簡單的方法來選擇退出這種行為。 例如,所有方法都是事務性的,但我可以應用 @NonTransactional 之類的方法並更精細地管理事務。

實際上OpenSessionInViewInterceptor將在您的任何控制器代碼開始之前打開一個會話(並隱式地進行一個事務),並在 http 請求完成之前關閉它。 所以它應該可以解決你的兩個要求。

查看來源

OpenEntityManagerInView也是如此。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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