[英]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.