我的项目情况如下:
1、使用Springmvc 3.0.5 Hibernate3.5.6 JPA,配置persistence.xml使用mysql;
2、使用Dao、Daosupport,Service、ServiceBean,web.xml中,使用OpenEntityManagerInViewFilter;
3、在使用Junit4做单元测试时,保存数据可以通过,但是控制器中,无法保存数据,错误如下:
--控制器的保存方法中先执行了一次查询操作,这是操作完成的提示:
DEBUG org.hibernate.loader.Loader:(Loader.java:1966)
- done entity load
DEBUG org.hibernate.jdbc.ConnectionManager:(ConnectionManager.java:427)
- aggressively releasing JDBC connection
--然后该方法执行了另一个保存操作:save--service.save--serviceBean.save--dao.save(entity),出现如下提示:
DEBUG org.hibernate.event.def.AbstractSaveEventListener:(AbstractSaveEventListener.java:327)
- delaying identity-insert due to no transaction in progress
--问题就在这里,我对第二个操作的前后设置logger,发现第一个操作完成后,jdbc链接被关闭,而第二个操作,根本不打开连接和事务,Debug信息见上。
--问题出现后,我查了国内外的多个论坛,回答的都不太明确;国内去年3月16日,有人问了一个同样问题,但最后如何解决,他没有回答。
--是本站的Copperfield 同志,在我的问题发出后,不到4个小时内,正确地解答了这个问题,这里非常感谢,他的回答见下面链接:请教:SpringMVC JPA 事务,单元测试通过,控制器不开启事务,如何解决
分享到:
相关推荐
7. **测试**:项目可能包含单元测试和集成测试,利用 JUnit 和 Mockito 等工具对 Service 和 Controller 进行验证。 在实践中,这个例子将展示如何设置一个基本的 CRUD 应用,通过 Spring MVC 提供 RESTful API,而...
它通过DispatcherServlet接收HTTP请求,然后分发到相应的控制器(Controller),控制器再调用业务逻辑层(Service)处理请求,最后返回视图(View)给用户。SpringMVC具有良好的解耦性和可测试性,使得开发Web应用...
`propagation`属性定义了事务的传播行为,如REQUIRED(默认值,如果存在事务则加入,不存在则新建)、REQUIRES_NEW(总是新建事务,即使在已有事务中调用,也会暂停当前事务并开启新的事务)等。 将事务配置到...
例如,`@Component`、`@Service`、`@Repository`和`@Controller`定义了不同类型的bean,`@Autowired`自动装配依赖,`@Transactional`开启事务管理,`@RequestMapping`处理HTTP请求映射等。通过使用注解,开发者可以...
SpringMVC是Spring框架的一部分,是一个轻量级的、模型-视图-控制器(Model-View-Controller, MVC)的Web应用框架。它简化了处理HTTP请求、数据绑定、验证以及与后端服务交互的过程。SpringMVC以其松耦合、可测试性...
8. **事务管理**:Spring支持声明式事务管理,可以在Spring配置文件中开启事务管理,并在需要事务控制的Service层方法上添加@Transactional注解。 9. **Web配置**:配置SpringMVC的DispatcherServlet,设置视图解析...
Service层也可以通过`@Transactional`注解开启事务,确保多个操作的原子性。 在"SpringMVC_Hibernate项目"中,"fr2u"可能代表的是具体的功能模块或者文件夹名称,通常会包含Controller、Service、DAO以及对应的实体...
Spring MVC通过DispatcherServlet作为前端控制器,接收请求并分发到相应的处理器,处理器完成业务逻辑后,可以将结果返回给视图层进行渲染。 Spring框架则是整个Java企业级应用的核心,它提供了依赖注入(DI)和...
例如,`@Service`注解标识业务层服务,`@Autowired`自动装配依赖,`@Transactional`开启事务管理。这种注解驱动的方式减少了配置文件的复杂性,提高了开发效率。 **项目搭建步骤** 1. **环境配置**:安装JDK、Maven...
事务管理是Hibernate的一大优势,Spring MVC 可以自动管理这些事务,通过 `@Transactional` 注解,可以在方法级别声明事务边界,无需手动开启和关闭事务。 Maven 是一个项目管理和综合工具,它管理项目的构建、报告...
SpringMVC 和 iBatis 的整合是 Java Web 开发中常见的技术组合,它将 SpringMVC 的优秀控制层设计与 iBatis 的灵活数据访问层相结合,为开发提供了高效且可维护的解决方案。下面我们将详细探讨这个整合过程中的关键...
它提供了一种模型-视图-控制器(MVC)架构,帮助开发者将业务逻辑、数据处理和用户界面分离,提高了代码的可维护性和可测试性。Spring MVC通过DispatcherServlet处理HTTP请求,通过控制器(Controller)处理业务逻辑...
2. **Spring配置**:在Spring的配置文件中,使用`@Configuration`和`@EnableTransactionManagement`注解开启事务管理。然后,通过`@Bean`注解创建两个DataSource bean,分别对应不同的数据库连接。 3. **MyBatis...
在Service层,我们可以使用@Transactional注解来开启事务,Spring会在必要时自动提交或回滚事务。 在实际开发中,我们还需要考虑错误处理、日志记录、安全性(如Spring Security)以及性能优化等方面。例如,使用...
同时,`@EnableTransactionManagement`开启事务管理,`@Transactional`注解标记在需要事务的方法上,实现数据库操作的原子性。 为了测试和运行这个项目,你需要配置合适的数据库连接(如MySQL),并在pom.xml中添加...
在SpringMVC项目中,可以通过Spring的HibernateTemplate或JPA来管理数据库事务,实现数据持久化。Spring的声明式事务管理可以自动处理事务的开启、提交、回滚,使得代码更加简洁。 **6. AOP(面向切面编程)** ...
这些技术是Java后端开发的重要支柱,它们的组合能够提供强大的模型-视图-控制器(MVC)架构,持久层解决方案以及依赖注入功能。 Spring MVC是Spring框架的一部分,专门用于构建Web应用程序。它通过注解如@...
- **编程式事务管理(基于Java编程实现事务控制)**:通过编程方式手动控制事务的开启、提交或回滚,这种方式不推荐使用,因为它增加了代码的复杂性。 - **Spring中常用的事务类型**:Spring支持本地事务、全局事务...
AOP则允许在不修改代码的情况下,通过切面进行横切关注点的处理,如日志记录、事务管理等。 SpringMVC是Spring框架的一个模块,专门用于处理Web请求。它采用Model-View-Controller设计模式,将业务逻辑、数据和用户...