2017-08-10 8 views
0

リクエストから新しいデータを更新したいと思います。spring jpaは新しいデータを更新しません

リクエストJSONデータは次のようになります。

[{"media_id : 1, "path" : "some path", ...}, {"media_id : 2, "path" : "some path", ...}] 

これらの主キーは、すでに

だから、それはそれらの行を更新するデータベースに存在し、私がチェックアウトした古いデータ

をそれは

を更新する必要がある。しかし、デバッグログの更新SQLのみを更新しますメディアオブジェクトには要求の新しいデータが含まれています

しかし、まだ古いデータで更新を試みています

私の間違いは何ですか?

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); 
} 

答えて

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); 
} 
+0

バネデータの保存方法jpaは、主キーが定義されている場合、データベースを更新します。 saveメソッドが呼び出されると、コンソールログからupdate sqlが表示されます。 しかし、私の問題は、更新すべきフィールドが新しいデータではなく古いデータであるということです。 –

+0

フィールドmodifiedAtにupdateステートメントの 'new Date()'値がないことを意味しますか? – lzagkaretos

+0

forループの後で、 'mediaRepo.save(media);の前に' List media = postToUpsert.getContent()。getMedia();を試すこともできます。 – lzagkaretos

関連する問題