abstract="true"去掉之后肯定要指定target啊,否则就不叫配置事务了。
首先看什么数据库,如果是MySQL,看看ENGINE是什么,MYISAM是不支持事务的。
save(null)是否抛出异常,我还真没试过。 
看看这篇文章,也许对你有用
http://blog.csdn.net/fbysss/archive/2007/08/15/1744874.aspx

解决方案 »

  1.   

    我首先使用show engines命令,查看一下,果然InnoDB DISABLE不能用,而MyISAM DEFAULT,很显然,默认的engine是engine = MyISAM,听了兄弟的提醒:MyISAM是不支持事务的,于是我跑到把 skip-innodb前面加#注释掉,再把default-storage-engine=MyISAM 改为default-storage-engine=INNODB,停止服务,重新运行程序,还是不行,我就在想原来没改配置文件之前默认的engine=MyISAM,所以以前创建的表应该还是engine=MyISAM,所以就通过 alter table [tablename] engine = InnoDB;把engine=MyISAM 修改为engine=INNODB,这样再次运行程序,结果事物果然起作用了。原因真的是出现在MySQL中engine上。
    兄弟,你的一语道破天机啊,能道破天机的你,必定是仙人了.
      

  2.   

    高手,再问你一个问题可以吗,为什么 方法中 不能有try{} catch{}呢,
        public void save(Uploadfile uploadfile) throws Exception{
            log.debug("执行dao中保存上传文件save方法");
           // try {
                getHibernateTemplate().save(uploadfile);
                getHibernateTemplate().save(null);
                log.debug("执行dao中保存上传文件save方法成功");
    /*        } catch (RuntimeException re) {
                log.error("执行dao中保存上传文件save方法失败", re);
                throw new Exception(re);
            } catch (Exception e){
             log.error("执行dao中保存上传文件save方法失败", e);
             throw new Exception(e);
            }*/需要把try{} catch{}注释掉,事物才能起作用,不知道你试过没有,是为什么呢?
      

  3.   

    可能你没仔细看我的文章,上面说了要注意异常类型的问题。
    首先,默认情况,spring是不处理CheckedException的。
    而你把所有的异常都封装之后抛出的是Exception(CheckedException),自然事务不回滚。
      

  4.   

    mysql默认安装就是用的default-storage-engine=INNODB
    这问题蛮有难度  ^_^
      

  5.   

    兄弟,那如果我们的方法有 CheckedException的话,那么我们就 只好不用try{} catch{}给它包含起来了,我们直接 在方法后面 throws Exception,这样就可以了,你说这样处理对吗?
      

  6.   

    楼上“独孤求败”,我看了你发表的文章,但不是很明白。希望可以参考源码。
    可以的话,贴出applicationContext.xml的代码,以及DAO类的源码和其实现相关的接口
    邮箱:[email protected]