我想使用 Spring MVC 和 Hibernate。我不想@Transactional
在所有控制器方法上使用服务层或属性(或者,我希望 Spring 将它们全部视为事务性的)。所以我想在控制器方法开始使用数据库时启动事务,并在控制器方法返回 ViewAndModel 时提交事务,或者如果发生任何错误则回滚事务。我还希望视图支持延迟休眠加载,例如,如果 html 模板请求,则以自动提交模式选择数据。
我知道最佳实践涉及创建一个带有@Transactional
属性的单独服务层,但我的应用程序不会从这种额外的复杂性中受益,我想尽可能地简化代码。
我了解到OpenSessionInViewInterceptor
允许在视图中继续使用休眠会话,因此这可能解决了我的第二个要求。但是如何使所有控制器方法都具有事务性?
理想情况下,如果我需要,我想要一种简单的方法来选择退出这种行为。例如,所有方法都是事务性的,但我可以应用 @NonTransactional 之类的方法并更精细地管理事务。