方法返回实体类视图,若在视图中修改了某个属性,其数据库中数据亦被修改。

问题:

最近,项目中发现了一个问题,一个返回分页视图的列表。(该视图也是实体类),返回数据需要对某个属性进行修改,首先根据条件查出符合条件的所有数据,其次遍历这些数据,对某个属性进行修改(并没有保存)。最后发现,该视图对应的数据表字段内容,也被修改。

public PageDataResponse<PropertyCheck> queryPropertyCheck(
      @RequestParam(required = false, defaultValue = "1") Integer currentPage,
      @RequestParam(required = false, defaultValue = "10") Integer pageSize,
      @RequestParam(required = false) String name,
      @RequestParam(required = false) Long beginTime,
      @RequestParam(required = false) Long endTime
  ) {
    currentPage = currentPage > 0 ? currentPage - 1 : currentPage;
    Page<PropertyCheck> page = propertyService
        .queryPropertyCheck(name, beginTime, endTime, currentPage, pageSize);
    List<PropertyCheck> propertyChecks = page.getContent();
    propertyService.updatePropertyCheckStatus(propertyChecks);
    return mgrAssembler.toPageDataResponse(page);
  }

其中,updatePropertyCheckStatus方法:

public void updatePropertyCheckStatus(List<PropertyCheck> propertyChecks) {
    propertyChecks.forEach(propertyCheck -> {
      propertyCheck.setDepartmentName(
          departmentRegionNodeService.findNameById(propertyCheck.getDepartmentRegionId()));
      List<String> regionIdListByParentId = departmentRegionNodeService.findDepartmentRegionIdListByParentId(propertyCheck.getDepartmentRegionId());
      Set<String> usernameSet = staffService.getUsernameListByRegion(regionIdListByParentId);
      Set<String> set = getAllPropertyIdByUsername(usernameSet);
      int count = propertyCheckDeatilRepository.countByPropertyCheckId(propertyCheck.getId());
      if (count >= set.size() ) {
      	propertyCheck.setCreator("java入门到放弃");
        propertyCheck.setStatus(PropertyCheck.FINISHED); // 2
      }
    });
  }

数据表:
未调用方法之前数据:
在这里插入图片描述调用之后:
在这里插入图片描述

结论:

如果想返回一个对象,需要修改其中的内容,并且不修改数据表内容,可以新建一个对象来替代视图。

ps:

纯属个人记录。仅作参考。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值