我的数据库中有一些虚拟数据,其中“活动”实例仅包含一个 activityId 作为其属性。 ID 是字符串,现在是手动设置的。这只是一个测试/虚拟项目。
我在我的 spring boot 项目中调用了一个@RestController,它有一个 putmapping 应该保存更改的对象。
我想更新一个现有的活动,只需更改它的 id 看看它是否有效。 putmapping如下:
@PutMapping("/activity/{id}")
public ResponseEntity<Activity> updateActivity(@PathVariable String id, @RequestBody Activity activity) {
Optional<Activity> activityOptional = activityRepo.findById(id);
if (activityOptional.isPresent()) {
activityRepo.save(activity);
return new ResponseEntity<>(activity, HttpStatus.OK);
} else {
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
}
在邮递员中,我提出了一个放置请求,我调用了 url:localhost:8080/activity/0001
因为我想用 id=0001 更新活动。我想将其更新为 0033.
在邮递员中,我输入了我希望它更改为的原始 json 格式:
{
"activityId": "0033"
}
通过这样做,它不会更新活动,而是使用新 ID 创建一个新活动。
如何实际更新活动的 id?
JPA 需要判断
save
是新的还是更新的。为此,默认情况下,它将使用看起来像您的 ID 的主键。这意味着更改您的 ID 将告诉 JPA 这是一个新条目。
最简单的方法可能是使用本机查询。在你的回购协议中,有一个类似的方法:
@Query(nativeQuery = true,
value = "update activity set activityID = ?1 where activityId = ?2")
void updateActivityId(String newId, String oldId);