0 0

springmvc + hibernate,事务控制问题20

@Override
@Transactional(readOnly = false, rollbackFor = Exception.class)
public int edit(GroupBean groupBean, List menuArray,
			List menuList) throws Exception {
		// 1.保存新修改的Group
		Group group = new Group();
		group.setGroupId(groupBean.getGroupId());
		group.setGroupName(groupBean.getGroupName());
		group.setRemark(groupBean.getRemark());
		groupDAO.attachDirty(group);            ------------------1

		// 2.比较新修改的菜单和旧的菜单,如果有变化则同时修改对应的菜单
		// 否则只需要修改Group对象
		if (!this.compare(menuArray, menuList)) {
			// 删除旧的对应关系(可能历史删除遗留)
			groupMenuDAO.deleteByGroupId(group.getGroupId());        ------------------- 2

			// 添加Group与Menu的对应关系
			GroupMenu groupMenu = null;
			int menuId = 0;
			for (int i = 0; i menuId = menuDAO.findByMenuCode(menuArray.get(i).toString())       -------------  3
						.getMenuId();
				groupMenu.setMenuId(menuId);
				groupMenuDAO.save(groupMenu);
			}
		}
		return 1;
}

 以上是service的一个方法,做了注解的方式标示控制事务,在调试的时候发现在第3个操作的出错的时候,第一个操作已经回滚了,而第二个操作并没有回滚。究竟是什么问题呢,这三个操作都必须保持一致性,所以第二个应该也要回滚的,请各位大神指点指点啊~~


问题补充:问题已经解决了,我当时采用调试是确定在第三个操作时才发生异常的。最终发现第二个操作之所以没有回滚是因为它和另外两个操作不在同一个session里面,也就是这句话groupMenuDAO.deleteByGroupId(group.getGroupId());这里的实现我不小心用了sessionFactory.openSession()导致的,谢谢的回答~ <br /> <br /><div class="quote_title">java-xb 写道</div><div class="quote_div">第一个已经回滚,说明遇到了Exception&nbsp; 而你的方法是抛出这个异常,这就好比你回滚后,还有其他代码执行,也就是你的第二操作和第三操作 <br />可能程序是这样执行的: <br />try{ <br />&nbsp; 第一操作 <br />}catch(Exception){ <br />&nbsp; rollback() <br />&nbsp; 第二操作 <br />&nbsp; 第三操作 <br />} <br />你试着把异常进行try&nbsp; catch&nbsp; 试试 <br /> <br /></div> <br />

问题补充:谢谢你的回答,我的问题之前已经解决了,不是spring对事务控制的问题,只是我在dao实现里面第二个操作用了openSession的操作,而不是用回第一个操作的session所以导致这个情况。另外,@Transactional不一定要加在接口上的,实现类一样可以,只是范围不一样。 <br /><div class="quote_title">gteam.yu 写道</div><div class="quote_div">把事务交给spring帮你完成,你的注解 @Transactional 应该放在接口的方法上,不是实现类的方法。 <br />我的在service的方法上面加上@Transactional,没有出现你的问题。</div> <br />
2011年12月26日 16:53

2个答案 按时间排序 按投票排序

0 0

把事务交给spring帮你完成,你的注解 @Transactional 应该放在接口的方法上,不是实现类的方法。
我的在service的方法上面加上@Transactional,没有出现你的问题。

2011年12月28日 14:40
0 0

第一个已经回滚,说明遇到了Exception  而你的方法是抛出这个异常,这就好比你回滚后,还有其他代码执行,也就是你的第二操作和第三操作
可能程序是这样执行的:
try{
  第一操作
}catch(Exception){
  rollback()
  第二操作
  第三操作
}
你试着把异常进行try  catch  试试

2011年12月27日 08:49

相关推荐

    springmvc+hibernate+easyui

    Hibernate支持实体类、会话管理、事务处理、缓存策略等功能,大大降低了数据库操作的复杂性。在SpringMVC项目中,Hibernate通常与Spring Data JPA结合使用,实现便捷的数据访问。 【EasyUI】 EasyUI是一个基于...

    SpringMVC+HIbernate登录程序并进行增删改查

    SpringMVC+Hibernate登录程序并进行增删改查是一个经典的Web开发示例,它整合了两个重要的Java技术框架——SpringMVC和Hibernate,用于构建基于Java的动态网站应用。SpringMVC是Spring框架的一部分,主要负责处理...

    Maven整合Spring+SpringMVC+Hibernate+SpringDataJPA

    在现代Java Web开发中,"Maven整合Spring+SpringMVC+Hibernate+SpringDataJPA"是一个常见的架构组合,被广泛应用于构建企业级应用程序。这个组合通常被称为"SSM",其中"M"代表Maven,"S"代表Spring,包括Spring核心...

    基于注解的springMVC+hibernate+oracle包含数据库查询

    在IT行业中,SpringMVC、Hibernate以及Oracle数据库是常见的技术栈,用于构建高效、可维护的企业级Web应用程序。本文将详细解析基于注解的SpringMVC+Hibernate+Oracle数据库集成的实现过程及其核心知识点。 首先,...

    Spring+SpringMVC+Hibernate+JSP框架搭建

    5. **控制流程**:SpringMVC的Controller接收请求,调用业务服务层(由Spring管理的Bean),服务层通过Hibernate操作数据库,然后返回结果给Controller,Controller再将数据传递给JSP页面展示。 这个框架组合的优势...

    springmvc+hibernate+oracle基础框架

    在SpringMVC中,可以使用Spring的声明式事务管理来控制Hibernate的事务。同时,通过SessionFactory创建Session,进而进行数据操作。 对于Oracle数据库,需要创建对应的数据库实例,并导入或执行数据库脚本(如dmp或...

    SpringMVC+hibernate实例

    3. SpringMVC中使用Hibernate的整合,如声明事务管理器、配置DataSource、注入SessionFactory等。 4. 控制器(Controller)的编写,包括RequestMapping注解的使用、模型数据的绑定与传递。 5. Service层的设计,如何...

    spring3+springmvc+jpa+hibernate多数据源

    "spring3+springmvc+jpa+hibernate多数据源"是一个示例项目,它演示了如何在一个应用中集成Spring 3、Spring MVC、JPA 2.0以及Hibernate,以实现对多个数据源的支持。下面将详细介绍这些技术及其集成的关键点。 **...

    springmvc+hibernate使用jar包集合

    在Java Web开发中,Spring MVC和Hibernate是两个非常重要的框架,它们分别负责处理控制器层和持久层的任务。Spring MVC提供了一种模型-视图-控制器(MVC)架构,使得开发者能够有效地组织和管理应用程序的业务逻辑,...

    springmvc+spring+hibernate

    Spring MVC、Spring 和 Hibernate 是Java Web开发中的三大主流框架,它们各司其职,共同构建了一个强大而灵活的后端架构。Spring MVC 负责处理HTTP请求并将其路由到相应的控制器,Spring 提供了依赖注入(DI)和面向...

    springMvc+hibernate Demo

    这个 "springMvc+hibernate Demo" 压缩包文件很可能是为了展示如何将这两个框架整合在一起,创建一个完整的数据驱动的 Web 应用。 **Spring MVC 框架** Spring MVC 是 Spring 框架的一部分,设计用于构建可维护、松...

    SpringMVC+Hibernate整合的登录Demo 导入即可直接运行适合初次接触整合

    SpringMVC和Hibernate是Java开发中常用的两个框架,SpringMVC负责处理Web应用中的Controller层,而Hibernate则是ORM(对象关系映射)框架,用于管理数据库操作。将这两个框架整合在一起,可以构建出高效且易于维护的...

    Spring+SpringMVC+Hibernate+Maven框架搭建及配置文件源码

    在IT行业中,SSH框架指的是Spring、SpringMVC和Hibernate这三个组件的组合,它们是Java Web开发中的主流技术栈。Spring提供了依赖注入和面向切面编程,SpringMVC用于处理HTTP请求,而Hibernate则是用于对象关系映射...

    Spring+SpringMVC+Hibernate 框架整合

    此外,Spring还能接管Hibernate的事务管理,实现声明式事务,使得事务控制更加简洁。 具体整合步骤可能包括以下部分: 1. 配置Spring的ApplicationContext,定义Bean,包括DataSource、SessionFactory、Service层和...

    SpringMVC+hibernate4.3+Spring4.1整合demo

    **SpringMVC+Hibernate4.3+Spring4.1整合详解** 在当今的Java Web开发领域,SpringMVC、Hibernate和Spring(SSH)是极为流行的三大框架,它们各自负责不同的职责,共同构建出高效、可维护的Web应用程序。SpringMVC...

    spring+springMVC+Hibernate整合

    它通过Spring的控制反转和面向切面编程,结合SpringMVC的Web处理能力和Hibernate的数据持久化,大大提升了开发效率和代码质量。在实际项目中,开发者可以根据具体需求调整和优化整合过程,以达到最佳的开发效果。

    maven(springmvc+spring+hibernate)

    4. **配置文件**:配置struts.xml、spring-context.xml和hibernate.cfg.xml等核心配置文件,定义组件、bean、数据源、事务管理器等。 5. **实体类和映射文件**:创建Java实体类并编写对应的Hibernate映射文件(.hbm....

    maven+spring+springmvc+hibernate项目示例

    在IT行业中,构建高效、可维护的Web应用是至关重要的,而"Maven+Spring+SpringMVC+Hibernate"是一个常用的技术栈,它整合了多个强大的工具和框架来简化开发流程。下面将详细介绍这个项目示例中涉及的关键知识点。 1...

    SpringMVC+Hibernate+EXT

    Hibernate支持CRUD(创建、读取、更新、删除)操作,事务管理,以及HQL(Hibernate查询语言)和Criteria API,使得数据库查询更为简洁和高效。 【EXT】 EXTJS(现称为Sencha EXT JS)是一个用于构建富客户端...

    SpringMVC+Hibernate+Spring整合实例

    SpringMVC、Hibernate和Spring是Java开发中三大核心框架,它们各自负责应用程序的不同层面:SpringMVC用于处理HTTP请求和响应,Hibernate则是持久层框架,负责数据库操作,而Spring作为全能容器,提供依赖注入和面向...

Global site tag (gtag.js) - Google Analytics