例項化的地點解析
阿新 • • 發佈:2018-12-23
領悟:例項化在遍歷的裡面和外面,效果是不一樣的,如果例項化在遍歷的外面,如下程式碼:
/** *多個行政班合成一個上課班,返回該上課班Id * *@paramclassIds多個行政班Id *@return上課班Id *@author嚴文文 *@since2.0.022018-11-1016:10:18 */ @Override public String insertTeachClassIdByClassIds(List<String>classIds){ AdmTeachClassEntity admTeachClassEntity=new AdmTeachClassEntity(); List<AdmTeachClassEntity> admTeachClassEntityList=new ArrayList<>(); String teachClassId=BaseUuidUtils.base58Uuid(); List<String>classIdList=classIds.stream().collect(Collectors.toList()); classIdList.forEach(e->{ admTeachClassEntity.setId(BaseUuidUtils.base58Uuid()); admTeachClassEntity.setOperator("大米時代"); admTeachClassEntity.setTeachClassId(teachClassId); admTeachClassEntity.setClassId(e); admTeachClassEntity.setIsDelete(0); admTeachClassEntityList.add(admTeachClassEntity); }); intsize=admTeachClassDao.insertAll(admTeachClassEntityList); if(size>0){ returnteachClassId; }else{ return"多個行政班合成一個上課班失敗"; } }
效果如圖:
你會發現插入的資料是一樣的,所以這個導致id衝突,報錯提示如下:
### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry 'Vje3gjJ9TvCwbHkwszL24S' for key 'PRIMARY'
; Duplicate entry 'Vje3gjJ9TvCwbHkwszL24S' for key 'PRIMARY'; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry 'Vje3gjJ9TvCwbHkwszL24S' for key 'PRIMARY'] with root cause
提示主鍵衝突
但是如果換成如下程式碼
/ ** *多個行政班合成一個上課班,返回該上課班Id * *@paramclassIds多個行政班Id *@return上課班Id *@author嚴文文 *@since2.0.022018-11-1016:10:18 */ @Override publicStringinsertTeachClassIdByClassIds(List<String>classIds){ List<AdmTeachClassEntity>admTeachClassEntityList=newArrayList<>(); StringteachClassId=BaseUuidUtils.base58Uuid(); List<String>classIdList=classIds.stream().collect(Collectors.toList()); classIdList.forEach(e->{ AdmTeachClassEntityadmTeachClassEntity=newAdmTeachClassEntity(); admTeachClassEntity.setId(BaseUuidUtils.base58Uuid()); admTeachClassEntity.setOperator("大米時代"); admTeachClassEntity.setTeachClassId(teachClassId); admTeachClassEntity.setClassId(e); admTeachClassEntity.setIsDelete(0); admTeachClassEntityList.add(admTeachClassEntity); }); intsize=admTeachClassDao.insertAll(admTeachClassEntityList); if(size>0){ returnteachClassId; }else{ return"多個行政班合成一個上課班失敗"; } }
最後插入資料成功!
解析錯誤:當例項化在遍歷的外面時,第二次生成的物件會覆蓋第一次生成的物件,結果兩次插入相同的資料,導致主鍵衝突,當例項化在便利的外面時,兩次生成的物件是不相同的,所以能插入成功.