首页 > 解决方案 > Spring boot PUT 操作正在对 DB 中的所有列进行查询

问题描述

使用 Spring 框架,尝试通过仅更改有效负载中的一个属性来进行更新休息操作

@RequestMapping(value = "/uiv/activeDiscrepancies/{id}", method = RequestMethod.PUT)
public ResponseEntity update(@PathVariable("id") BigInteger id,
                             @RequestBody ActiveDiscrepancies activeDiscrepancy)
                   throws SureException{

    //ActiveDiscrepancies adiscrepancies =  
    activeDiscrepancyRepo.save(activeDiscrepancy, id);

    ActiveDiscrepancies adiscrepancies = activeDiscrepancyRepo.findByActiveDiscrepancyId(id); 
    activeDiscrepancy.setActiveDiscrepancyId( adiscrepancies.getActiveDiscrepancyId() );
    activeDiscrepancyRepo.save(activeDiscrepancy);
}

但更新查询触发是

休眠:

update ACTIVE_DISCREPANCIES 
   set ACTIVE_DISCREPANCY_NAME=?, AUDITED_ENTITY=?, CREATION_TIME=?, 
       DELTA_TYPE=?, DISCREPANCY=?, EXPIRY_TIME=?, LAST_UPDATED_TIME=?, 
       MESSAGE_KEY=?, NETWORK=?, RECON_REASON=?, RECON_TYPE=?, 
       REMARKS=?, RESOURCE_LABEL=?, STATUS=? 
 where ACTIVE_DISCREPANCY_ID=?

那么对于其他列被替换为空值,如何解决这个问题呢?

标签: javaspringspring-boot

解决方案


首先,PUT 方法旨在接收和更新整个实体。对于部分更新,PATCH 方法是首选。您可以在此处阅读更多相关信息。

如果您希望更新整个实体,则应在请求正文中发送整个实体。如果没有,那么您应该通过 id 从 db 中获取实体,相应地应用您的更改并保存它。Spring Data repos 中的 save 方法将替换整个实体。


推荐阅读