话不多说,今天遇到的问题是在业务逻辑处理时,遇到插入两张表的操作,父表的数据插入成功,子表的数据插入失败,并抛出异常,然而事务并未回滚,从而导致父表的数据成功插入,字表没有数据插入。
通过排查,由于框架用的是编程式事务(注解方式),而非声明式事务(配置文件配置),因此发现该层业务层实现类未加上
@Transactional注解,加上,如图:
@Service
@Transactional("transactionManager")
public class ReportDataServicempl implements ReportDataService {
@Autowired
private ReportDataDao reportProductDao;
@Override
public List<ReportData> reportDataList(String reportDate) {
return reportProductDao.reportDataList(reportDate);
}
@Override
public Boolean SaveReport(Map dataMap) {
try {
UUID speech_id = UUID.randomUUID();
Date createDate = new Date();
Date updateDate = null;
String reportName = dataMap.get("reportName").toString();
String speechContent = dataMap.get("speechContent").toString();
NewReport newReport = new NewReport(speech_id.toString(), reportName,createDate,updateDate,speechContent);
reportProductDao.insertReportList(newReport);
Map<Integer,String> keyMap=new HashMap<Integer, String>();
keyMap.put(1,"SeaTransport");
keyMap.put(2,"SeaTravel");
keyMap.put(3,"SeaTechnology");
keyMap.put(4,"SeaProduct");
keyMap.put(5,"SeaMedicine");
keyMap.put(6,"SeaInformation");
keyMap.put(7,"SeaBoat");
keyMap.put(8,"SeaMining");
keyMap.put(9,"SeaFish");
keyMap.put(10,"SeaOilGas");
keyMap.put(11,"SeaConstruction");
keyMap.put(12,"SeaAquaticProducts");
keyMap.put(13,"SeaScience");
keyMap.put(14,"SeaEnvironment");
keyMap.put(15,"SeaWater");
keyMap.put(16,"SeaFinance");
keyMap.put(17,"SeaEnvironMonitor");
keyMap.put(18,"Sea");
for(int i = 0;i<keyMap.size();i++) {
NewReportDict newReportDict = new NewReportDict();
newReportDict.setId(UUID.randomUUID().toString());
newReportDict.setspeechId(speech_id.toString());
newReportDict.setDictKey(keyMap.get(i).toString());
reportProductDao.insertReportDictList(newReportDict);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
}
怀着得意的心情测试之后,发现结果还是一样,事务并未回滚!!!WTF~~?
然后,一直点击保存,一直测试,一直看着这不过很多行的代码,突然发现了一些刺眼的东西----方法名····大写了···,脑海中隐约浮现出一些字句:javaBean规范:变量、方法名前两个字母,要么全部小写,要么全部大写·····
于是将方法名改成了小写开头,运行成功,成功报错,然后事务成功回滚了,ε=(´ο`*)))唉,大错不犯,小错不断~~
所以说,规范很重要,不然分分钟被击毙···,顺便说下,代码不是我写的,我只是走查下,嗯~~~
附上:javaBean命名规范 (是的,只是文字而已,复制了自己搜索吧~~~)