0 0

springmvc+hibernate整合事务不回滚,求解0

最近心血来潮研究下了springmvc,发现比struts2好用多了,配置也方便,捣鼓了一阵,最后想把hibernate也整进去,结果悲剧就来了,事务就是不回滚,实在没招了,哪位大侠给看下,上代码

springmvc-servlet.xml
<mvc:annotation-driven/>

	<!-- 扫描注解时,将service,DAO层的注解排除,只扫描Controller注解 -->
	<context:component-scan base-package="com.springmvc" use-default-filters="false">
		<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
		<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" />
	</context:component-scan>

	<bean
		class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
		<property name="mediaTypes">
			<map>
				<entry key="html" value="text/html" />
				<entry key="json" value="application/json" />
			</map>
		</property>
		<property name="viewResolvers">
			<list>
				<bean class="org.springframework.web.servlet.view.BeanNameViewResolver" />
				<bean
					class="org.springframework.web.servlet.view.InternalResourceViewResolver">
					<property name="prefix" value="/WEB-INF/views/" />
					<property name="suffix" value=".jsp" />
				</bean>
			</list>
		</property>
		<property name="defaultViews">
			<list>
				<bean
					class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
			</list>
		</property>
	</bean>
applicationContext-db.xml
<context:annotation-config />
	<context:component-scan base-package="com.springmvc" /> 
	
	<!-- 配置数据源 -->
	<bean id = "mappings" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations" value="classpath:dataSources.properties"></property>
	</bean> 
	
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
		<property name="driverClassName" value="${driverClassName}" />
		
		<property name="url" value="${url}" />
		<property name="username" value="${username}" />
		<property name="password" value="${password}" />
		<property name="maxActive" value="${maxActive}" />
		<property name="maxIdle" value="${maxIdle}" />
		<property name="maxWait" value="${maxWait}" />
		<property name="defaultAutoCommit" value="${defaultAutoCommit}" />
	</bean>
	
	<!-- 配置sessionFactory -->
	<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
		<property name="dataSource" ref="dataSource"/>
		<!-- 扫描的domain包路径 -->
		<property name="packagesToScan" value="com.springmvc.domain"/>
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">${hibernate.dialect}</prop>
				<prop key="hibernate.show_sql">true</prop>
				<prop key="hibernate.hbm2ddl.auto">none</prop>
				<prop key="hibernate.search.default.directory_provider">org.hibernate.search.store.FSDirectoryProvider</prop> 
				<prop key="hibernate.search.default.transaction.merge_factor">100</prop>	
				<prop key="hibernate.search.default.transaction.max_buffered_docs">100</prop> 
				<prop key="hibernate.search.autoregister_listeners">true</prop> 
				<prop key="hibernate.search.indexing_strategy">manual</prop> 
			</props>
		</property>
	</bean>
	
	<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory"/>
	</bean>
	
	<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
		<property name="dataSource" ref="dataSource"/>
	</bean>
	
	<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
applicationContext-aop.xml
<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<tx:method name="update*" propagation="REQUIRED"/>  
            <tx:method name="save*" propagation="REQUIRED"/>  
            <tx:method name="add*" propagation="REQUIRED"/>  
            <tx:method name="create*" propagation="REQUIRED"/>  
            <tx:method name="do*" propagation="REQUIRED"/>  
            <tx:method name="del*" propagation="REQUIRED"/>  
            <tx:method name="remove*" propagation="REQUIRED"/>  
	        <tx:method name="get*" read-only="true" />  
	        <tx:method name="query*" read-only="true" />  
	        <tx:method name="find*" read-only="true" />  
	        <tx:method name="*"/>  
		</tx:attributes>
	</tx:advice>

	<aop:config proxy-target-class="true">
		<aop:pointcut expression="execution(public * com.springmvc.service.impl.*ServiceImpl.*(..))" id="allServiceMethod"/>
		<aop:advisor pointcut-ref="allServiceMethod"   advice-ref="txAdvice" />
	</aop:config>
UserServiceImpl
Service(value = "userService")
@Transactional(rollbackFor=Exception.class)
public class UserServiceImpl implements UserService {

	@Autowired
	private UserDAO userDAO;

	@Override
	public void addUser(User user) {
		userDAO.addUser(user);
	}

}
UserDAOImpl
@Repository(value = "userDAO")
public class UserDAOImpl extends HibernateDaoSupport implements UserDAO {

	private Logger logger = Logger.getLogger(getClass());
	
	@Override
	public void addUser(User user) {
		logger.debug("新增用户");
		this.getHibernateTemplate().save(user);
	}
UserServiceTest
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"file:webroot/WEB-INF/springmvc-servlet.xml","classpath:applicationContext-*.xml"})
public class UserServiceTest{

	@Autowired
	private UserService userService;
	
	@Test
	public void testAddUser() {
		
		User user1 = new User();
		user1.setCode("A002");
		user1.setName("haha");
		userService.addUser(user1);
		
		User user2 = new User();
		user2.setCode("A001");
		user2.setName("haha");
		userService.addUser(user2);
		
		User user3 = new User();
		user3.setCode("A001");//code是唯一的,这里报唯一约束错误,前面两条数据是不是应该插入失败?
		user3.setName("haha");
		userService.addUser(user3);
	}

}
2013年8月05日 08:42

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

0 0

采纳的答案

Service(value = "userService")  
@Transactional(rollbackFor=Exception.class)  
public class UserServiceImpl implements UserService { 

没看到哪里抛出了exception。如果不抛出exception,spring不会rollback

2013年8月05日 11:36
0 0

楼主技术用的好混乱啊,既配置了事物边界,又使用了注解式的事物,我建议楼主最好选择 一种,另边界事物配置在接口上而不是实现类中。另楼主介绍下使用的数据库是否支持事物。

2013年8月05日 11:12

相关推荐

    基于Spring+SpringMVC+Hibernate的图书管理系统

    系统采用技术:Spring+SpringMVC+Hibernate+jQuery+Ajax+面向接口编程。 简介:该图书管理项目实现了三种角色的功能,分别是超级管理员,图书管理员和读者。在系统中,实现了图书管理,统计管理,系统管理和系统监控...

    spring+springMVC+Hibernate整合

    在IT行业中,Spring、SpringMVC和Hibernate是三个非常重要的框架,它们分别专注于不同领域的功能。Spring是一个全面的Java企业级应用开发框架,提供依赖注入(DI)和面向切面编程(AOP)等核心特性;SpringMVC是...

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

    这篇描述提到的是一个适合初学者的登录Demo,它包含了完整的SpringMVC与Hibernate的整合示例,便于理解和实践。 1. **SpringMVC框架**:SpringMVC是Spring框架的一部分,主要负责处理HTTP请求,将请求分发到对应的...

    idea工具创建的Spring+SpringMVC+Hibernate+maven项目

    标题中的"idea工具创建的Spring+SpringMVC+Hibernate+maven项目"指的是使用IntelliJ IDEA这个集成开发环境(IDE)构建的一个Java Web项目,该项目整合了四个关键的技术框架:Spring、SpringMVC、Hibernate以及Maven...

    Spring+SpringMVC+Hibernate框架集成详解

    Spring+SpringMVC+Hibernate 框架集成详解 本文档旨在详细介绍 Spring、SpringMVC 和 Hibernate 框架的集成,旨在帮助开发人员快速了解这三个框架的集成过程。 Spring 框架 Spring 框架是一个 Java 语言的开源...

    基于SpringMVC+Hibernate实现的在线购物商城.zip

    基于springmvc+Hibernate实现的在线购物商城.zip基于springmvc+Hibernate实现的在线购物商城.zip基于springmvc+Hibernate实现的在线购物商城.zip基于springmvc+Hibernate实现的在线购物商城.zip基于springmvc+...

    SpringMVC+Hibernate+Spring整合实例

    总的来说,"SpringMVC+Hibernate+Spring整合实例"提供了一个全面的学习平台,帮助开发者深入理解Java企业级应用的开发模式和最佳实践。通过这个实例,你可以提升自己的技能,为未来的项目开发打下坚实的基础。

    spring+springMVC+hibernate整合框架jar包

    spring + spring MVC + hibernate三大框架整合开发必要的jar包,完整版本。没有缺失。spring + spring MVC + hibernate三大框架整合开发必要的jar包,完整版本。没有缺失。

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

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

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

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

    springMVC+maven+hibernate框架

    springMVC+maven+hibernate框架,搭建的过程 可以参考 java进阶(五)------springMVC---springMVC+Hibernate+maven完整搭建运行步骤 http://blog.csdn.net/zzq900503/article/details/49892783

    Maven整合Spring+SpringMVC+Hibernate+SpringDataJPA

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

    springmvc+spring+hibernate

    通过上述步骤,我们完成了Spring MVC、Spring、Hibernate的整合。这样的架构具有良好的解耦性、可扩展性和维护性,适用于大型企业级应用的开发。在实际项目中,可能还需要考虑其他因素,如安全性(Spring Security)...

    SpringMVC+Hibernate+annotation+Easyui权限管理系统

    SpringMVC+Hibernate+annotation+Easyui权限管理系统,Session过期控制(包括Ajax请求的过期控制),访问权限控制(权限控制到按钮),hibernate数据库用户名与密码加密,其它的不说了,绝对物有所值

    maven(springmvc+spring+hibernate)

    在SSH整合中,Spring管理Struts和Hibernate,提供了统一的事务管理,使得业务逻辑处理更为一致。同时,Spring还能够与Struts进行深度集成,比如通过Spring的ModelAndView对象替代Struts的ActionForward,使得模型和...

    Spring+SpringMVC +Hibernate 整合

    Spring、SpringMVC和Hibernate是Java开发中三大核心框架,它们的整合是企业级Web应用的常见架构选择。Spring作为基础框架,提供了依赖注入(DI)和面向切面编程(AOP)等功能;SpringMVC则负责处理HTTP请求,实现...

    百度Ueditor整合springMVC+hibernate完整demo

    《整合百度UEditor与SpringMVC+Hibernate:创建一个完整的Web应用DEMO》 在Web开发中,富文本编辑器是不可或缺的一部分,它为用户提供了一种便捷的方式来输入和格式化文本。百度UEditor是一款功能强大的在线编辑器...

    Spring+SpringMVC+Hibernate 框架整合

    在"Spring+SpringMVC+Hibernate 框架整合"中,这三者的核心功能和整合方式是主要的知识点。 Spring是一个全面的后端开发框架,它提供了依赖注入(DI)和面向切面编程(AOP)等核心特性,用于简化应用的创建和管理。...

    Spring+SpringMVC+Hibernate+JSP框架搭建

    "Spring+SpringMVC+Hibernate+JSP框架搭建"就是一个经典的Java Web开发解决方案,它整合了四个核心组件来实现全面的后端功能和用户界面交互。下面我们将深入探讨这四个组件以及它们如何协同工作。 1. **Spring框架*...

    springmvc+hibernate使用jar包集合

    此外,Hibernate还支持事务管理和二级缓存,增强了系统的性能和可维护性。 当使用Spring MVC与Hibernate结合时,需要引入一系列的jar包,这些jar包主要包括: 1. **Spring框架**:包括spring-context、spring-web...

Global site tag (gtag.js) - Google Analytics