下面是Action里面的代码,出现错误的区域我单独提出来在最下面,现在主表的数据全部可以插入 子表插入不进去。求帮助啊大神们!!分数不多请笑纳吧
public String contentCopy(){
//记录日志
LogUtils.debug(logger, "start TbAssessContentInfoAction method contentCopy() ");
try {
/*
*调用查看功能
*/
//界面上需要获取的主表信息
Map<String,Object> tbAssessContentInfo;
//界面上需要获取的子表信息
List<Map<String,Object>> busInfoList;
//使用jdbc查询数据的方式
Connection conn = DbUtils.dbUtils().getConn();
//在考核人员管理中查询到所有人TB_ASSESS_KPI_INFO_BACK
List<TbAssessContentPersionVo> persionName = null;
//查询都有哪些考核内容,考核内容类别字典表TB_SOURCE_DICTIONARY_CONTENT_STAT
List<TbSourceDictionaryContstatVo> contStat = null;
//查询科室对应的考核内容项
List<TbAssessJifenVo> jfList = null;
//查询所有人
persionName = tbAssessContentInfoLogic.selectTbAssessKpiInfoBack(conn);
//查询考核内容项
contStat = tbAssessContentInfoLogic.selectTbSourceDictionaryContstat(conn);
//获取id
String id = request.getParameter("uuid");
//查询主子表
tbAssessContentInfo = tbAssessContentInfoLogic.selectTbAssessContentInfoVo(id);
//查询子表
busInfoList = tbAssessContentInfoLogic.selectTbAssessContentbusInfoList(id);
//初始化日期考核时间,日期选择,初始日期 查询出来什么样就是什么样
String initDate = tbAssessContentInfo.get("ASSESS_MOUTH")+"";
if("".equals(initDate) || !com.wondersgroup.qyws.jxkh.util.StringUtils.isNumeric(initDate)){
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH) + 1;
initDate = "" + year + ( month<10 ? "-0" + month : "-"+month);
}
Date date = new Date();
//获取存储对象,执行保存
TbAssessContentInfo info = this.tbAssessContentInfo;
//保存子表数据对象
List<TbAssessContentbusInfo> listInfo = new ArrayList<TbAssessContentbusInfo>();
//初始化TbAssessContentbusInfo//contentInfoId,projectCode,projectName,assessMouth,operaDate
TbAssessContentbusInfo busInfo = null;
//主表
Map<String,Object> tbAssessContentInfo2 = tbAssessContentInfoLogic.selectTbAssessContentInfoVo(id);
TbAssessContentInfo info1 = new TbAssessContentInfo();
//保存主表的人员信息
info1.setAssessContent(tbAssessContentInfo2.get("ASSESS_CONTENT").toString()); //获取TbAssessContentInfo里面的考核内容,(比如工作量,质量)
info1.setWorkName(tbAssessContentInfo2.get("WORK_NAME").toString());
info1.setWorkCode(tbAssessContentInfo2.get("WORK_CODE").toString());
info1.setDeptName(tbAssessContentInfo2.get("DEPT_NAME").toString());
info1.setDeptCode(tbAssessContentInfo2.get("DEPT_CODE").toString());
info1.setOrgCode(tbAssessContentInfo2.get("ORG_CODE").toString());
info1.setOrgName(tbAssessContentInfo2.get("ORG_NAME").toString());
//子表
List<Map<String,Object>> busInfoList1 = tbAssessContentInfoLogic.selectTbAssessContentbusInfoList(id);
TbAssessContentbusInfo busInfo1 = new TbAssessContentbusInfo();
for(Map<String,Object> map:busInfoList1){
if(map.containsKey("ASSESS_KPI_NAME")){
Object o = map.get("ASSESS_KPI_NAME");
String p_name = o.toString();
busInfo1.setAssessKpiName(p_name);
}
if(map.containsKey("ASSESS_KPI_CODE")){
Object o = map.get("ASSESS_KPI_CODE");
String p_name = o.toString();
busInfo1.setAssessKpiCode(p_name);
}
listInfo.add(busInfo1);
}
//主表主键
String contentId = UUIDUtils.get();
{//主表对象赋值
//考核中
info1.setStatus(Final.Other.CENTENT_STATUS_1);
//操作日期
info1.setOperaDate(new Date());
//考核日期
String inspectiondates = request.getParameter("inspectiondates");
info1.setAssessMouth(DateUtils.nextMonth());
info1.setUuid(contentId);
//保存子表人员信息
}
//保存主表
tbAssessContentInfoLogic.insertTbAssessContentInfo(info1);
//保存子表
if(listInfo.size()>0){
tbAssessContentInfoLogic.insertTbAssessContentInfo(listInfo);
}
} catch (Exception e) {
ErrorMessageUtils.getErrorMesssge(request,e);
return ResultUrl.ERROR;
}
//-----------------------------------
LogUtils.info("跳转界面到 /WEB-INF/web/jxkh/content/TbAssessContent/contentSearch.jsp");
//记录日志
LogUtils.debug(logger, "ent TbAssessContentInfoAction method contentCopy() ");
return ResultUrl.REDIRECT;
}
------------------------下面试出现问题的地方
//子表
List<Map<String,Object>> busInfoList1 = tbAssessContentInfoLogic.selectTbAssessContentbusInfoList(id);
TbAssessContentbusInfo busInfo1 = new TbAssessContentbusInfo();
for(Map<String,Object> map:busInfoList1){
if(map.containsKey("ASSESS_KPI_NAME")){
Object o = map.get("ASSESS_KPI_NAME");
String p_name = o.toString();
busInfo1.setAssessKpiName(p_name);
}
if(map.containsKey("ASSESS_KPI_CODE")){
Object o = map.get("ASSESS_KPI_CODE");
String p_name = o.toString();
busInfo1.setAssessKpiCode(p_name);
}
listInfo.add(busInfo1);
}
------解决思路----------------------
1.数据库主表与字表是否有主外键关联
2.子表中主表ID字段是否设置是非空
因为你的子表对象是没有设置主表主键字段的,busInfo1?.set主表主键字段,所以你现在的程序是有BUG的
------解决思路----------------------
另外 你的操作两张表的业务逻辑写在ACTION层,你们的事务控制是控制在ACTION层吗?(主表数据保存成功,子表数据保存失败的时候能保证事务回滚吗??)
------解决思路----------------------
//主表主键
String contentId = UUIDUtils.get();
?List<Map<String,Object>>?busInfoList1?=?tbAssessContentInfoLogic.selectTbAssessContentbusInfoList(id);
????????????????
????????????????for(Map<String,Object>?map:busInfoList1){
TbAssessContentbusInfo?busInfo1?=?new?TbAssessContentbusInfo(); //这段代码是不是应该在循环里面
---设置主键
????????????????????if(map.containsKey("ASSESS_KPI_NAME")){
????????????????????????Object?o?=?map.get("ASSESS_KPI_NAME");
????????????????????????String?p_name?=?o.toString();
????????????????????????busInfo1.setAssessKpiName(p_name);
????????????????????}
????????????????????if(map.containsKey("ASSESS_KPI_CODE")){
????????????????????????Object?o?=?map.get("ASSESS_KPI_CODE");
????????????????????????String?p_name?=?o.toString();
????????????????????????busInfo1.setAssessKpiCode(p_name);
????????????????????}
????????????????????listInfo.add(busInfo1);
????????????????}
------解决思路----------------------
子表也要有自己的主键