spring jpa不会更新新数据

时间:2017-08-10 12:39:47

标签: spring spring-data-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);
}

1 个答案:

答案 0 :(得分:0)

如果您的意思是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);
}