当前位置: 首页 > 知识库问答 >
问题:

使用Spring MVC和Hibernate实现每个请求的单个事务

胡致远
2023-03-14

我想使用Spring MVC 和Hibernate。我不想在所有控制器方法上使用服务层或@Transactional属性(或者,更确切地说,我希望Spring将它们全部视为事务性)。因此,我想在控制器方法开始使用数据库时启动事务,并在控制器方法返回 ViewAndModel 或回滚事务(如果发生任何错误)时提交事务。此外,我希望视图支持延迟Hibernate加载,例如,如果html模板请求,请在自动提交模式下选择数据。

我知道最佳实践涉及使用@Transactional属性创建一个单独的服务层,但我的html" target="_blank">应用程序不会从额外的复杂性中受益,我想尽可能简化代码。

我了解到OpenSessionInViewInterceptor允许在视图中继续使用Hibernate会话,因此这可能解决了我的第二个要求。但是如何使所有控制器方法都是事务性的呢?

理想情况下,如果我需要的话,我希望有一个简单的方法来退出这种行为。E、 g.所有方法都是事务性的,但我可以应用类似@NonTransactional的方法,更精细地管理事务。

共有1个答案

花烨
2023-03-14

实际上,OpenSessionInView感知器将在任何控制器代码启动之前打开一个会话(并隐式地打开一个事务),并在http请求完成之前关闭它。因此,它应该可以解决您的两个要求。

查看源代码

< code > OpenEntityManagerInView 也是如此。

 类似资料:
  • 我正在使用JSF 2.1Hibernate4.1.7Spring3.2.1Spring安全SQLServer2012的Web应用程序工作。一切正常,即CRUD操作。但有些方法需要处理 2 个或更多实体(更新、添加等),例如 如果在执行第2行(创建实体)时出现错误,我需要合并的实体(或更新、创建)或之前的DB函数来获得回滚,以便我的DB上的数据保持正确 我将与Spring注释结合使用。 在我的< c

  • 是否可以使用Hibernate Spring对以下内容进行建模。 公开会议 我使用Spring TransactionTemplate,它同时执行会话事务生存期范围。 原因是,有时我在业务流程中有几个阶段,我希望在每个阶段完成后提交。但是,我希望继续使用相同的持久对象。如果每个事务都有一个单独的会话,则会出现暂时/分离的异常,因为原始会话已关闭。 这有可能吗?

  • 问题内容: 我有一个实体- 。由描述。 Hibernate为每个实体创建一个表,因此当我调用时,我的数据总是保存到该表中。 现在,我需要另一个表来存储相同类型的数据,并且只需要将我的实体保存到该表中。 数据结构 (类似这样): 使用这个 : 和结果,我应该在和 中。 由于系统限制,我无法将这两个对象放在一个表中。(即使创建额外的字段也是个坏主意)。 我可以不进行子类化吗?使用Programmati

  • Hibernate为每个实体创建一个表,因此当我调用时,我的数据总是保存到这个表中。 现在,我需要另一个表来存储相同类型的数据,并且我只需要将我的实体保存到该表中。 数据结构(类似于以下内容): 由于系统的限制,我不能将这两个对象放在一个表中。(即使创建额外字段也是坏主意)。 我可以在不进行子类化的情况下这样做吗?使用programmaticaly hibernate配置?

  • 问题内容: 我在Tomcat上使用Spring的Hibernate。我一直在阅读和重新阅读该主题上指向JBoss Wiki页面 的信息,这很有帮助。但这使我有些疑问。 为每个请求启动事务的想法困扰着我。我想我可以将过滤器限制为某些控制器-也许将需要事务的所有控制器放在伪“ tx”路径下。但是,如果您不知道是否需要交易,使用交易不是一个坏主意吗?而且,如果我只是在某些请求中进行读取(读取很有可能来自

  • 我正在使用SoapUI的开源版本进行一些SOAP Web服务负载测试。 我希望每个请求与以前的请求尽可能不同,我不希望使用相同的属性进行负载测试。 我有一个属性文件,它有几个属性,每个属性值都调用groovy脚本从文件中读取一个随机值,并将其分配给测试用例属性,即在值字段中: <代码>${=(DynamicPropertyScript)} 脚本: 如果我在测试用例开始时调用这个脚本,那么这个脚本工