hibernate 循环遍历 list对象,只保存最后一条数据,偶现

问题描述

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

hibernate 循环遍历 list对象,只保存最后一条数据,偶现的相关文章

编写高质量代码改善C#程序的157个建议[动态数组、循环遍历、对象集合初始化]

原文:编写高质量代码改善C#程序的157个建议[动态数组.循环遍历.对象集合初始化] 前言   软件开发过程中,不可避免会用到集合,C#中的集合表现为数组和若干集合类.不管是数组还是集合类,它们都有各自的优缺点.如何使用好集合是我们在开发过程中必须掌握的技巧.不要小看这些技巧,一旦在开发中使用了错误的集合或针对集合的方法,应用程序将会背离你的预想而运行. 本文已更新至http://www.cnblogs.com/aehyok/p/3624579.html .本文主要学习记录以下内容: 建议16.

npoi导出的时候只导出最后一条数据

问题描述 npoi导出的时候只导出最后一条数据 public void Export(HttpContext context) { context.Response.ContentType = "application/vnd.ms-excel;charset=UTF-8"; //文件名进行url编码,防止乱码 string strFileName = HttpUtility.UrlDecode("班级平均分排名.xls"); context.Response.Ad

listview 只显示最后一条数据,帮忙看看吧

问题描述 listview 只显示最后一条数据,帮忙看看吧 解决方案 package com.bypro.adapter.visit; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.util.SparseArray; import android.view.LayoutInflater

【问题解决】Mybatis一对多/多对多查询时只查出了一条数据

问题描述: 如果三表(包括了关系表)级联查询,主表和明细表的主键都是id的话,明细表的多条数据只能查询出来第一条/最后一条数据. 三个表,权限表(Permission),权限组表(PermissionGroup),权限组与权限的关系表(PermissionPermissionGroupKey) 实体类就不写上来了. 原出错映射文件: <resultMap id="permissionGroupResultMap" type="cn.kx59.admin.entity.P

mysql-测试hibernate框架自动建表并保存数据,没报错,但数据只保存了一部分

问题描述 测试hibernate框架自动建表并保存数据,没报错,但数据只保存了一部分 解决方案 因为你去给Product这个对象创建三个实例,pro.pro2.pro3,对吧,然后你不停的给pro去赋值(pro.setName()),最后pro的最后一个值把前两个覆盖掉了,所以只添加了一个棉花糖.正确的方式是要给每个,你把第29行改成pro2.setName():30行pro2.setDir():33行pro3.setName():34行pro3.setDir(),就万事大吉了,祝你成功! 解决

关于序列化:PHP 拥有序列化方法,可以返回对象的字符串表示。但序列化只保存对象的成员数据而不包话方法

对象|数据|字符串     PHP不支持永久对象,在OOP中永久对象是可以在多个应用的引用中保持状态和功能的对象,这意味着拥有将对象保存到一个文件或数据库中的能力,而且可以在以后装入对象.这就是所谓的序列化机制.PHP 拥有序列化方法,它可以通过对象进行调用,序列化方法可以返回对象的字符串表示.然而,序列化只保存了对象的成员数据而不包话方法. 在PHP4中,如果你将对象序列化到字符串$s中,然后释放对象,接着反序列化对象到$obj,你可以继续使用对象的方法!我不建议这样去做,因为(a)文档中没有

json解析对象,循环遍历

问题描述 json解析对象,循环遍历 使用jsonp的getjson 出现Resource interpreted as Script but transferred with MIME type text/plain:错误 怎么解决,希望大神们帮帮忙 解决方案 用 $.ajax 吧

jquery中object对象循环遍历的方法_jquery

一个朋友问对象如何转为数组,当我问他为啥要转得时候,他告诉我,数组可以用js循环遍历,而对象则不可以.其实呢,对象同样可以循环遍历的啊.不用转换也可以循环!说明你对js或者jquery的某些操作不是很熟练!在这里我简单介绍一下! 案例 我们看如下对象: var data={ 张三:69, 李四:72, 王五:90, 二麻子:88, 前端博客:100, haorooms : 98, 王大壮:99 } 假如上面是后台返回的一个key,一个是value的对象(这种对象相信大家经常遇到吧!),现在要把这

jquery对象object循环遍历的方法

前言 一个朋友问对象如何转为数组,当我问他为啥要转得时候,他告诉我,数组可以用js循环遍历,而对象则不可以.其实呢,对象同样可以循环遍历的啊.不用转换也可以循环!说明你对js或者jquery的某些操作不是很熟练!在这里我简单介绍一下! 案例 我们看如下对象: var  data={        张三:69,        李四:72,        王五:90,        二麻子:88,        前端博客:100,       haorooms : 98,       王大壮:99