Java 使用Spring MVC和Hibernate的每个请求一个事务
我想使用SpringMVC和Hibernate。我不想在所有控制器方法上使用服务层或Java 使用Spring MVC和Hibernate的每个请求一个事务,java,spring,hibernate,open-session-in-view,Java,Spring,Hibernate,Open Session In View,我想使用SpringMVC和Hibernate。我不想在所有控制器方法上使用服务层或@Transactional属性(或者,更确切地说,我希望Spring将它们都视为事务性的)。所以我想在控制器方法开始处理数据库时启动事务,并在控制器方法返回ViewAndModel时提交事务,或者在发生任何错误时回滚事务。此外,我希望视图支持惰性hibernate加载,例如,如果html模板请求,则以自动提交模式选择数据 我知道最佳实践包括创建一个具有@Transactional属性的独立服务层,但我的应用程序
@Transactional
属性(或者,更确切地说,我希望Spring将它们都视为事务性的)。所以我想在控制器方法开始处理数据库时启动事务,并在控制器方法返回ViewAndModel时提交事务,或者在发生任何错误时回滚事务。此外,我希望视图支持惰性hibernate加载,例如,如果html模板请求,则以自动提交模式选择数据
我知道最佳实践包括创建一个具有@Transactional
属性的独立服务层,但我的应用程序不会从额外的复杂性中获益,我希望尽可能简化代码
我了解到,OpenSessionInViewInterceptor
允许在视图中继续使用hibernate会话,因此这可能解决了我的第二个需求。但是如何使所有控制器方法都是事务性的呢
理想情况下,如果我需要的话,我希望有一个简单的方法来选择退出这种行为。例如,所有方法都是事务性的,但我可以应用@NonTransactional之类的方法,并更精确地管理事务。实际上
OpenSessionInViewInterceptor
将在任何控制器代码启动之前打开一个会话(隐式地打开一个事务),并在http请求完成之前关闭它。因此,它应该解决您的两个需求
看
OpenEntityManagerInView也一样
您考虑过使用Spring AOP吗?是的,我不太清楚,但现在正在研究它。我希望有一些简单的解决方案,因为这个任务似乎很典型。