spring 注解配置,不生效,不能回滚? 请大神指点!

Seal-Zhang 2015-07-16 11:01:00
加精
配置文件

<!-- jdbc事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>

<tx:annotation-driven transaction-manager="transactionManager"/>


import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import com.jsaisino.sn.zsy.dao.SaveZDao;
import com.microsoft.sqlserver.jdbc.SQLServerException;

@Transactional
@Component("zservice")
public class ZService {
@Resource(name="savezdao")
private SaveZDao savezdao;
@Transactional(rollbackFor={Exception.class,RuntimeException.class,SQLServerException.class})
public String save(String SOLD_NUMBER, Map map_M ,List<Map<String,Object>> mapListJson) throws Exception{


try {
for (int i = 0; i < mapListJson.size(); i++) {
Map<String,Object> obj= mapListJson.get(i);
obj.put("SOLD_NUMBER", SOLD_NUMBER);
if(obj.get("is_zkh").equals("0")){ //不是折扣行 (子表数据保存)
savezdao.saveDetil(obj);
}else{ //是折扣行 (子表数据保存)
savezdao.saveRebateDetil(obj);
}
}
savezdao.saveHMain(map_M); //(主表保存)

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();

throw new Exception("运行时出错!");
}

return backflg;
}
}


为什么我这地方不能进行回滚, 子表,正常保存,主表保存出现异常,但是后天数据库,子表数据没有回滚。是不是我写的有问题?
...全文
2925 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuangkejiedi64 2017-08-26
  • 打赏
  • 举报
回复
因为你的表引擎是MyISAM哈哈。。。。。。。。
Lyy857220515 2015-08-28
  • 打赏
  • 举报
回复
13楼正解
五司命 2015-07-31
  • 打赏
  • 举报
回复
1.捕捉了异常,其实你声明Exception的时候回滚。此时事务的隔离级别没影响 2.数据库是否支持事务。MySql的数据引擎有两种的哦
董小姐_123 2015-07-30
  • 打赏
  • 举报
回复
alexliutokyo 2015-07-30
  • 打赏
  • 举报
回复
引用 2 楼 mymy1026 的回复:
第一:你使用的事默认的事务传播级别,即遇到运行时异常才回滚。 第二:如果你的主表保存发生异常,此时异常为运行时异常。 第三:你人为捕获了异常,注意,你捕获的事运行时异常,然后抛出了一个Exception,此时根据你设定的事务传播机制(只有运行时异常才回滚),Exception是不会回滚的
说的非常对
wocan23 2015-07-26
  • 打赏
  • 举报
回复
配置里没有配置支持注解的扫描
  • 打赏
  • 举报
回复
关注学习。。。
qqtqfs 2015-07-23
  • 打赏
  • 举报
回复
关注学习一下
kk34543 2015-07-22
  • 打赏
  • 举报
回复
关注一下,学习一下。
NeverGiveUp7 2015-07-22
  • 打赏
  • 举报
回复
补充一下:也有可能是throw new Exception("运行时出错!"); 的问题,你删了试一下!试出了原因跟大家分享一下!
qq_29711009 2015-07-22
  • 打赏
  • 举报
回复
谢谢楼主了。。。。。
NeverGiveUp7 2015-07-22
  • 打赏
  • 举报
回复
.......上面说的我是不认同的,添加了rollbackFor={Exception.class}就可以在我们自己捕获到异常的时候进行回滚! 建议: 1.把@Component("zservice")换成@Service试一下! 2.请确认一下下面的方法有没有单独的事务! savezdao.saveDetil(obj); savezdao.saveRebateDetil(obj); savezdao.saveHMain(map_M);   //(主表保存)
一个坚果 2015-07-22
  • 打赏
  • 举报
回复
我来补充一个原因,看看数据库的引擎,如果是mysql数据库,表的引擎是MyISAM的话,是不支持事务的
只是_曾经 2015-07-21
  • 打赏
  • 举报
回复
你把异常都处理掉了。自然不会回滚。结贴吧
业余草 2015-07-19
  • 打赏
  • 举报
回复
引用 2 楼 mymy1026 的回复:
第一:你使用的事默认的事务传播级别,即遇到运行时异常才回滚。 第二:如果你的主表保存发生异常,此时异常为运行时异常。 第三:你人为捕获了异常,注意,你捕获的事运行时异常,然后抛出了一个Exception,此时根据你设定的事务传播机制(只有运行时异常才回滚),Exception是不会回滚的
解析的非常正确,可以结贴了
  • 打赏
  • 举报
回复
hnshn 2015-07-17
  • 打赏
  • 举报
回复
看着代码写的应该没问题,在其他的service类中做下事务测试看是否正常
  • 打赏
  • 举报
回复
cattpon 2015-07-17
  • 打赏
  • 举报
回复
learning~
猿敲月下码 2015-07-17
  • 打赏
  • 举报
回复
换成throw new RuntimeException("运行时出错!"); 试试
加载更多回复(3)

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧