Spirng+hibernate的事物控制问题

问题描述

请教下大家,使用Spirng+hibernat进行事物管理,无法控制,我在service层进行事物控制,模拟条出错信息,但是不会回滚事物代码如下:applicationContext.xml<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:jee="http://www.springframework.org/schema/jee"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.0.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-3.0.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-3.0.xsdhttp://www.springframework.org/schema/jeehttp://www.springframework.org/schema/jee/spring-jee-3.0.xsd"default-autowire="byName"><context:component-scanbase-package="*"></context:component-scan><beanid="dataSource"class="com.mchange.v2.c3p0.ComboPooledDataSource"><propertyname="driverClass"value="com.mysql.jdbc.Driver"></property><propertyname="jdbcUrl"value="jdbc:mysql://localhost:3306/demo?useUnicode=true&amp;characterEncoding=UTF-8"></property><propertyname="user"value="root"></property><propertyname="password"value="123456"></property></bean><beanid="sessionFactory"class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"><propertyname="dataSource"><refbean="dataSource"/></property><propertyname="hibernateProperties"><props><propkey="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop><propkey="hibernate.show_sql">true</prop><propkey="hibernate.format_sql">true</prop><propkey=""></prop></props></property><propertyname="mappingResources"><list><value>com/frd/entity/model/User.hbm.xml</value></list></property></bean><beanid="transactionManager"class="org.springframework.orm.hibernate4.HibernateTransactionManager"><!--<propertyname="dataSource"ref="dataSource"></property>--><propertyname="sessionFactory"ref="sessionFactory"></property></bean><!--<tx:annotation-driventransaction-manager="transactionManager"/>--><!--事物的处理(事物管理器、事物的传播行为)--><tx:adviceid="testAdvice"transaction-manager="transactionManager"><tx:attributes><tx:methodname="*"propagation="REQUIRED"/></tx:attributes></tx:advice><aop:config><!--事物切入点--><aop:pointcutid="testPointcut"expression="execution(*com.frd.service.impl.*.*(..))"/><!--指定事物切入点,使用事物的处理--><aop:advisorpointcut-ref="testPointcut"advice-ref="testAdvice"/></aop:config></beans>

dao实现类packagecom.frd.dao.impl;importjava.util.List;importjavax.annotation.Resource;importjavax.print.attribute.standard.Finishings;importorg.hibernate.Query;importorg.hibernate.Session;importorg.hibernate.SessionFactory;importorg.hibernate.Transaction;importorg.springframework.stereotype.Repository;importcom.frd.dao.UserDao;importcom.frd.entity.model.User;@RepositorypublicclassUserDaoImplimplementsUserDao{@ResourceprivateSessionFactorysessionFactory;@OverridepublicvoidaddUser(Useruser)throwsException{sessionFactory.getCurrentSession().save(user);}@OverridepublicList<User>getAllUser()throwsException{Stringhql="fromUser";Queryquery=sessionFactory.getCurrentSession().createQuery(hql);returnquery.list();}@OverridepublicvoiddelUser(intuserid)throwsException{Sessionsession=sessionFactory.getCurrentSession();session.delete(session.get(User.class,userid));session.flush();}@OverridepublicUsergetUser(intuserid)throwsException{Stringhql="fromUseruwhereu.id=?";Queryquery=sessionFactory.getCurrentSession().createQuery(hql);query.setInteger(0,userid);return(User)query.uniqueResult();}@Overridepublicvoidupdate(Useruser)throwsException{Stringhql="updateUserusetu.username=?,u.password=?whereu.id=?";Queryquery=sessionFactory.getCurrentSession().createQuery(hql);query.setString(0,user.getUsername());query.setString(1,user.getPassword());query.setInteger(2,user.getId());intret=query.executeUpdate();}}

service实现类packagecom.frd.service.impl;importjava.util.List;importjavax.annotation.Resource;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Service;importorg.springframework.transaction.annotation.Transactional;importcom.frd.dao.UserDao;importcom.frd.entity.model.User;importcom.frd.service.Userservice;@ServicepublicclassUserserviceImplimplementsUserservice{@ResourceprivateUserDaouserdao;@OverridepublicvoiddelUser(intid)throwsException{//null用户ID主键,由数据库自动生成userdao.addUser(newUser(null,"abc","abc"));id=1000;userdao.delUser(id);}

我模拟了个环境,在删除方法中先添加个用户,然后删除id为1000的用户信息(数据库中不存在ID为1000的用户),这时候删除报异常,可是还是把用户添加进去了不会回滚,找了很久不知道哪里错了,请大家指教下,谢谢~

解决方案

解决方案二:
没人知道吗?
解决方案三:
你的配置文件里没有指定rollback-for="Exception"(这句不指定,默认就是抛RuntieException,但你的是Exception,故加上配置)另外,Mysql库有一种ISAM库模式不支持事务!要用innoDB

时间: 2024-08-31 07:02:33

Spirng+hibernate的事物控制问题的相关文章

Spirng AOP 事物控制问题

问题描述 这是业务公用的com.dream.business.proxy.services这是保存的核心包com.dream.framework.core所有的保存都要调用此包的方法我现在想用AOP切入service让在service实现类里面里面是一个事物,怎么控制,如果只控制com.dream.framework.core就没意义了,我要用一种想法就是@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)public@in

hibernate的事物是怎么去管理的

问题描述 hibernate的事物是怎么去管理的 希望能详细点 谢谢 解决方案 http://developer.51cto.com/art/200909/153614.htm解决方案二:在Hibernate中事务是通过Session来管理的.Hibernate的Session就相当于JDBC的事务解决方案三:http://zhidao.baidu.com/question/121440924.html

关于Struts+spirng+hibernate,Tomcat启动报错:

问题描述 启动tomcat时,一启动就报错,希望大家给予解释错误信息是:org.springframework.beans.factory.parsing.BeanDefinitionParsingException:Configurationproblem:UnexpectedfailureduringbeandefinitionparsingOffendingresource:classpathresource[applicationContext.xml]Bean'userInfoDao'

关于自己写的JDBC事物控制,交给spring aop管理的问题

问题描述 大家好,最近想自己写一个简单好用的框架,理念为:JDBC+Spring+SpringMVC,自己封装JDBC做增删改查操作,类的生命周期与事物管理交给spring管理,与前台Web交互用SpringMVC.现在遇到事物管理交由AOP管理的问题,实在头痛.下面将思路与代码写出来,请大家指点解决.以下是数据源与事物管理的配置:<beanid="dataSource"class="org.springframework.jdbc.datasource.DriverM

至急的一个问题,关于spring3.12+ mybatis的事物控制

问题描述 遇到一个很急的问题,我用的是声明式事务.样式参照论坛的涛ge的代码,有这样一个需求,比如在下面的代码中,假如save方法中的如果address 是 aaaa,那么要求事物强制回滚掉,这个地方该怎么解决啊package cn.javass.spring.chapter9.service.impl;//省略importpublic class AnnotationUserServiceImpl implements IUserService {... @Transactional(prop

【spring + hibernate】 事物无法回滚问题

问题描述 事物配置: Java代码 <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory"> <ref bean="sessionFactory&quo

程序访问数据库时出现间歇性打不开连接问题~~问题很棘手!!!

问题描述 系统架构采用的是struts2+hibernate+sybase,事物控制直接在底层DAO的方法里进行事物打开.提交.关闭回滚等工作,最近新开发了一个新模块,但是上传服务器后,持久化操作时出现间歇性的无法打开连接异常,异常详细我把图贴出来了,各位大侠审视一下,问题很棘手,数据库配置应该没什么问题,因为其它模块都运转正常,看看具体异常吧,见图附件: 问题补充:asyty 写道 解决方案 还没搞定么?解决方案二:我看了下报错,貌似异常是先抛出一个异常,跳到catch里执行transacti

搭配使用Struts+Spring+Hibernate的优点

传统的java web应用程序是采用jsp+servlet+javabean来实现的,这种模式实现了最基本的MVC分层,使的程序结构分为几层,有负责显示的jsp.负责流程逻辑控制的servlet.负责数据封装的javabean.但是这种结构仍然存在问题:如jsp页面中需要使用符号嵌入很多的java代码,造成页面结构混乱,servlet和javabean负责了大量的跳转和运算工作,耦合紧密,程序复用度低等等. 于是先出现了struts框架,它是一个完美的MVC实现,它有一个中央控制类(一个Serv

hibernate一对一双向关联的cascade问题

问题描述 一张Admin表,一张AdminInfo表Admin表publicclassAdminimplementsjava.io.Serializable{/*Id*/@Id@GenericGenerator(name="systemUUID",strategy="uuid")@GeneratedValue(generator="systemUUID")privateStringadminId;/*姓名*/@Column(nullable=fa