问题描述
- hibernate 循环遍历 list对象,只保存最后一条数据,偶现
-
@Transactional(readOnly = false, propagation = Propagation.REQUIRED)
public String rankScoreIn(MultipartFile file, String classid,
String testname, String grad, String subject) {
StringBuilder failureMsg = new StringBuilder();
int successNum = 0;
int failureNum = 0;Classname classname = null; // 班级信息 if (!StringUtils.isEmpty(classid)) { classname = classnameService.get(classid); grad = classname.getGrad(); } Organization organization = SiteUtil.getSite().getOrg(); try { ImportExcel ei = new ImportExcel(file, 1, 0); String subjectid = DictUtils.getDictValue(subject, Constants.SUBJECT, "0"); // 获得试卷信息 List<Testpaper> testpaperls = testpaperService.findByGrad(grad, testname, new Integer(subjectid)); Testpaper testpaper = null; if (testpaperls != null && testpaperls.size() > 0) { testpaper = testpaperls.get(0); } else { return "<br/>年级:"+grad+" 没有"+subject+"科目试卷"; } // 班级题目质量分析 List<StudentRank> list = ei.getDataListForScore(StudentRank.class, 3, subject); for (StudentRank studentRank : list) { try { successNum = this.saveRankScore(studentRank, classname, testpaper, organization, successNum); } catch (ConstraintViolationException ex) { failureMsg.append("<br/>考号: " + studentRank.getTestno() + " 导入学生成绩排名失败:"); List<String> messageList = BeanValidators .extractPropertyAndMessageAsList(ex, ": "); for (String message : messageList) { failureMsg.append(message + "; "); failureNum++; } } catch (Exception ex) { ex.printStackTrace(); failureMsg.append("<br/>考号: " + studentRank.getTestno() + " 导入学生成绩排名失败:" + ex.getMessage()); } } if (failureNum > 0) { failureMsg.insert(0, ",失败 " + failureNum + " 条问题得分,导入信息如下:"); } } catch (Exception e) { e.printStackTrace(); return "导入问题得分失败!失败信息:" + e.getMessage(); } return "已成功导入 " + successNum + " 条问题得分" + failureMsg.toString(); } public int saveRankScore(StudentRank studentRank, Classname classname, Testpaper testpaper, Organization organization, int successNum) { // 判断学生是否存在 String classnamestr = studentRank.getClassname().getClassname(); Classname classnameexist = classnameService.findByGradclass( testpaper.getGrad(), classnamestr); if (null == classnameexist) { // 不存在则创建 if (classname == null) { classname =studentRank.getClassname(); classname.setGrad(testpaper.getGrad()); classname.setClassname(classnamestr); classname.setSchool(organization); classname.setCreateTime(new Date()); classnameService.save(classname); Student student = studentRank.getStudent(); student.setClassname(classname); student.setGrad(testpaper.getGrad()); student.setPassword("123456"); student.setCreateTime(new Date()); studentService.save(student); studentRank.setClassname(classname); studentRank.setStudent(student); } else { // 如果班级存在判断学生是否存在?????????????? Student student = this.createStudent( studentRank.getStudent(), classname, testpaper); studentRank.setClassname(classname); studentRank.setStudent(student); } } else { // 如果班级存在判断学生是否存在?????????????? Student student = this.createStudent(studentRank.getStudent(), classnameexist, testpaper); studentRank.setClassname(classnameexist); studentRank.setStudent(student); } studentRank.setTestpaper(testpaper); studentRank.setCreateTime(new Date()); studentRankService.save(studentRank); successNum++; return successNum; } 代码 if (null == classnameexist) { // 不存在则创建 if (classname == null) { 这两个条件都满足时,只保存最后一条,其他条件则可以保存正常 请问是什么原因?
解决方案
应该是对象没有清空,导致后面的判断失误!
时间: 2024-08-30 00:41:36