事务重新理解:在执行批添加或批删除时 如果有10条数据需要处理,关系表和主键表 ,关系表操作完毕之后,在操作主键表时报错了,就需要将关系表数据复原,需要回滚事务(callback),而在这时,一个service代表一个事务,,在框架中一般在配置文件中配置了事务
<!-- 配置当出现Exception、RuntimeException、Exception时采用对应的事务操作 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="delete*" propagation="REQUIRED"
read-only="false" rollback-for="java.lang.Exception"
no-rollback-for="java.lang.RuntimeException" />
<tx:method name="insert*" propagation="REQUIRED"
read-only="false" rollback-for="java.lang.RuntimeException" />
<tx:method name="update*" propagation="REQUIRED"
read-only="false" rollback-for="java.lang.Exception" />
<tx:method name="find*" propagation="SUPPORTS" />
<tx:method name="get*" propagation="SUPPORTS" />
<tx:method name="select*" propagation="SUPPORTS" />
</tx:attributes>
</tx:advice>
在service类里以此种方式命名即为一个事务。
本人在处理以下业务时(效果好使,但是编码思路不对)
/**
* 条件删除 第二步:执行批量删除
*/
@SuppressWarnings("rawtypes")
@RequestMapping("/deleteDispatchRuleByconditionNext")
public String deleteByconditionNext(HttpServletRequest req,HttpServletResponse resp,Page page,WoDispatchRule dispatchRule,Model model){
/**通过筛选条件查找出符合条件的规则**/
page = SearchUtil.getQueryCondition(req, "deleteDispatchRuleBycondition", dispatchRule, page);
page = dispatchRuleService.findDispatchRuleList(page);
if(page.getData().size()>0){
for(int i=0;i<page.getData().size();i++){
WoDispatchRule dispatchRule2 = (WoDispatchRule)page.getResult().get(i);
dispatchRule.setRuleId(dispatchRule2.getRuleId());
dispatchRuleService.deleteById(dispatchRule);
}
}
model.addAttribute("message", "success");
return "/workorder/result";
}
第一:查询结果集是从page中取得,但是page.data是分页后的结果,所以是不完全结果集
第二:删除没有事务 一个service方法是一个事务,因为此部分代码写在了action里
第二:删除没有事务 一个service方法是一个事务,因为此部分代码写在了action里