開發(fā)過程中遇到的堆棧問題

今天在開發(fā)的的時候遇到了一個靈異事件,我在做停車子系統(tǒng)的vip車輛下發(fā),代碼如下

    @Override
    @Transactional
    public boolean insert(FixedCarDto model) {
        List<CarParkSpaceDto> carParkSpaceDtos = model.getCarParkSpaceDtos();
        List<FixedCarDto> issuedList = new ArrayList<>();
        carParkSpaceDtos.forEach(carParkSpaceDto -> {
            ...
            fixedCarService.insert(model);
            issuedList.add(model);
        });
        subsystemIssuedFixedCarManager.issuedVipOrFixedCar(issuedList);
        return true;
    }

然后我碰到了一個問題,就是我issuedList中的model的id都是同一個,很疑惑的是,明明我已經(jīng)把每一個model都setId了,怎么id還是同一個。返回去查數(shù)據(jù)庫,明明是新增了很多條,id也不一樣。怎么會出現(xiàn)這種問題

猛然發(fā)現(xiàn),issuedList中存放的是model的棧地址,并不是model的數(shù)據(jù)對象,model是在循環(huán)外面就有的,所以第一次第二次存放進issuedList的都是同一個地址,最終的list里的每一個model的值都會是最后一次修改時的值。

這里的誤區(qū)是因為持久化新增數(shù)據(jù)庫,覺得數(shù)據(jù)庫的數(shù)據(jù)不一樣,每個model的數(shù)據(jù)也會不一樣,其實持久化的時候,就將數(shù)據(jù)持久化到了硬盤上。

然后就修改了代碼

    @Override
    @Transactional
    public boolean insert(FixedCarDto model) {
        List<FixedCarDto> issuedList = new ArrayList<>();
        carParkSpaceDtos.forEach(carParkSpaceDto -> {
            ...
            fixedCarService.insert(model);
            //創(chuàng)建新對象接收老對象,否則兩次添加的model都是同一個model棧地址,第二次model的值改變會改變list里所有的model的值
            FixedCarDto issuedModel = BeanUtils.convert(model,FixedCarDto.class);
            issuedList.add(issuedModel);
            //下發(fā)子系統(tǒng)
        });
        subsystemIssuedFixedCarManager.issuedVipOrFixedCar(issuedList);
        return true;
    }

通過一個新對象去接收model,然后放入list,問題解決。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容