关于事务的问题

[复制链接]
查看11 | 回复8 | 2021-1-27 06:48:26 | 显示全部楼层 |阅读模式
@RequestMapping("live/add")
@Transactional
publicvoidsaveCmsLive(HttpServletRequestrequest,HttpServletResponseresponse,CmsLivecmsLive,CmsLiveNumcmsLiveNum){
(1).CmsLivelive=cmsLiveMng.addCmsLive(cmsLive);
cmsLiveNum.setLiveId(live.getLiveId());
(2).cmsLiveNumMng.addCmsLiveNum(cmsLiveNum);
Stringmessage=Constants.API_MESSAGE_SUCCESS;
Stringcode=ResponseCode.API_CODE_CALL_SUCCESS;
Stringbody="\"\"";
ApiResponseapiResponse=newApiResponse(request,body,message,code);
ResponseUtils.renderApiJson(response,request,apiResponse);
}

如上述代码(标记了(1),(2))我第一句执行成功了然后第二句执行失败了然后第一条的数据还是插入了数据库
我service层和controller层都加了事务注解,对应的xml文件也有还是没回滚

在spring-hibernate配置文件中也配置了





分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:48:26 | 显示全部楼层
ORM之事务处理
http://www.verejava.com/?id=17045470128784

回复

使用道具 举报

千问 | 2021-1-27 06:48:26 | 显示全部楼层
controller的bean是交给springmvc配置文件扫描的,service层才是spring管理。你注解加载controller需要在mvc配置问价加上
回复

使用道具 举报

千问 | 2021-1-27 06:48:26 | 显示全部楼层
解决方式:
1.新写一个service函数,包含(1)(2)的执行逻辑
2.在这个函数上添加@Transactional
3.在Controller中调用这个函数
回复

使用道具 举报

千问 | 2021-1-27 06:48:26 | 显示全部楼层
手动回滚吧.
回复

使用道具 举报

千问 | 2021-1-27 06:48:26 | 显示全部楼层
你事务为什么会写在cotnroller层呢,https://www.cnblogs.com/hjwublog/p/5626465.html
回复

使用道具 举报

千问 | 2021-1-27 06:48:26 | 显示全部楼层
service是spring支持事物的最高级别,不支持controller级事物,如果需要,建议你可以使用@Transactional(propagation=Propagation.PROPAGATION_REQUIRED)强制建立统一事物
事物传播分为三种
PROPAGATION_REQUIRED强制使用同一事物
PROPAGATION_REQUIRES_NEW调用创建新事物,新事物与原事物独立
PROPAGATION_NESTED一般用于分布式,做最终一致性
另外建议:
1.Conroller层完成基本的接口工作,完成数据完整性校验和数据格式转换工作
2.Service层实现事物的处理与实现具体业务逻辑
3.Dao层实现基本是数据逻辑CRUD,不参与业务逻辑

回复

使用道具 举报

千问 | 2021-1-27 06:48:26 | 显示全部楼层
亲,有没有在代码哪里捕捉了异常?
回复

使用道具 举报

千问 | 2021-1-27 06:48:26 | 显示全部楼层
异常没有捕捉控制台输出具体报错了的,注解放在controller层只是为了尝试一下
看了下3l的答案貌似是正确的不知道各位怎么看
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行