spring jpa不会更新新的数据
问题描述:
我想更新来自请求的新数据。spring jpa不会更新新的数据
请求JSON数据看起来像这样。
[{"media_id : 1, "path" : "some path", ...}, {"media_id : 2, "path" : "some path", ...}]
这些主键已经在数据库中存在
因此它将更新这些行应该更新
但在调试日志更新SQL只更新旧的数据
我签出它包含来自请求的新数据的媒体对象
但jpa仍尝试使用旧数据更新
我的错误是什么?
private List<Media> upsertMedia(SquarePostDetailResource postToUpsert) {
List<Media> media = postToUpsert.getContent().getMedia();
media.forEach((item) -> {
item.setCreatedAt(item.getId() == null ? new Date() : item.getCreatedAt());
item.setModifiedAt(new Date());
item.setMember(Member.builder().id(postToUpsert.getMemberId()).build());
item.setSquare(Square.builder().id(postToUpsert.getSquareId()).build());
item.setSquarePost(SquarePost.builder().id(postToUpsert.getPostId()).build());
});
return (List<Media>) mediaRepo.save(media);
}
答
如果您的意思是foreach内的更新不更新数据库,您可以尝试以下操作。
private List<Media> upsertMedia(SquarePostDetailResource postToUpsert) {
List<Media> media = postToUpsert.getContent().getMedia();
List<Media> updatedMedia = new ArrayList<>();
media.forEach((item) -> {
item.setCreatedAt(item.getId() == null ? new Date() : item.getCreatedAt());
item.setModifiedAt(new Date());
item.setMember(Member.builder().id(postToUpsert.getMemberId()).build());
item.setSquare(Square.builder().id(postToUpsert.getSquareId()).build());
item.setSquarePost(SquarePost.builder().id(postToUpsert.getPostId()).build());
updatedMedia.add(item);
});
return (List<Media>) mediaRepo.save(updatedMedia);
}
弹簧数据的保存方法如果主键被定义,jpa将更新数据库。 当调用save方法时,我可以从控制台日志中看到更新sql。 但我的问题是,应更新的字段是旧数据而不是新数据。 –
你的意思是说修改过的字段在update语句中没有'new Date()'值吗? – lzagkaretos
您也可以尝试'列出 media = postToUpsert.getContent()。getMedia();'在for循环之后和'mediaRepo.save(media);'之前''。 –
lzagkaretos