java - 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=?
那么对于其他列被替换为空值,如何解决这个问题呢?
解决方案
首先,PUT 方法旨在接收和更新整个实体。对于部分更新,PATCH 方法是首选。您可以在此处阅读更多相关信息。
如果您希望更新整个实体,则应在请求正文中发送整个实体。如果没有,那么您应该通过 id 从 db 中获取实体,相应地应用您的更改并保存它。Spring Data repos 中的 save 方法将替换整个实体。
推荐阅读
- flutter - 水平对齐复选框和文本在颤动的中心
- javascript - 使用 Javascript 对时间跨度进行单元测试
- android - 如何在android中模拟用于单元测试的视图
- python - Discord.py:如何提取布尔值以判断某人是否静音
- javascript - 正则表达式在特定单词后添加破折号
- json - 过滤 ansible 输出
- html5-canvas - 如何在网页上嵌入带有音频的 PowerPoint 演示文稿?
- powershell - 如何在 PowerShell http 服务器状态检查脚本中的每个 url 之间进行时间延迟
- php - SQL 数据库拆分列
- jquery - Ajax 成功没有在我的控制器上旋转