首页 > 代码库 > 循环保存的对象在事物提交后发现只保存了一个对象

循环保存的对象在事物提交后发现只保存了一个对象

有时候我们在使用事务循环保存多个对象时,可能会出现在提交事务后发现只保存了最后一个对象

例如

public void saveSystemDDL(SystemDDLPojo systemDDLPojo) {
        String keywordname = systemDDLPojo.getKeywordname();
        String[] ite = systemDDLPojo.getItemname();
        String typeflag = systemDDLPojo.getTypeflag();
        if (typeflag != null && typeflag.equals("add")) {
            for (int i = 0; i < ite.length; i++) {
                systemDDLPojo.setDdlName(ite[i]);
                systemDDLPojo.setKeyword(keywordname);
                systemDDLPojo.setDdlCode(i + 1);
//                System.out.println(systemDDLPojo.getDdlName());
//                System.out.println(systemDDLPojo.getDdlCode());
                this.elecSystemDDLDaoImpl.saveObject(systemDDLPojo);
            }
        }

这段代码执行后貌似几个对象的属性值都获取到了,可是却只保存了最后一个对象,这是因为每次循环都是使用的同一个对象,所以到最后就只会保存最后一个对象

这时,只需要将SystemDDLPojo systemDDL = new SystemDDLPojo();放到循环体的里面,保证每一次循环都是一个新的对象

public void saveSystemDDL(SystemDDLPojo systemDDLPojo) {
        String keywordname = systemDDLPojo.getKeywordname();
        String[] ite = systemDDLPojo.getItemname();
        String typeflag = systemDDLPojo.getTypeflag();
        if (typeflag != null && typeflag.equals("add")) {
            for (int i = 0; i < ite.length; i++) {
                SystemDDLPojo systemDDL = new SystemDDLPojo();
                systemDDL.setDdlName(ite[i]);
                systemDDL.setKeyword(keywordname);
                systemDDL.setDdlCode(i + 1);
//                System.out.println(systemDDL.getDdlName());
//                System.out.println(systemDDL.getDdlCode());
                this.elecSystemDDLDaoImpl.saveObject(systemDDL);
            }
        }

这样就解决了