2017-07-10 24 views
0

Springの行のリストに対して「差分」更新を行うためのいくつかのファンシーな方法はありますか?例えば 、私は私のデータベースにそのような行を持っている:リポジトリの差分更新リスト

  • 行B
  • 私はアイテムの新しいセットを提供しています

行C:

  • 行A
  • 行C
  • 私は、結果として持つようにしたいどのような3210
  • 行D

は次のとおりです。

  • 行A(更新、削除、コメントを追加していない)
  • 行C(更新、削除、コメントを追加しません)
  • 行D(追加)
  • 削除された行のB

それを追跡するためにここに重要です作成日と変更日のこれをSpringで実現する便利な方法はありますか?

ありがとうございました。

解決策:
これを行うには "良い"方法はありませんでした。最後に@CreationTimestampと@UpdateTimestampでDateフィールドを追加しました(後者は単純なDate/LocalDateフィールドです)。新しい行をアップロードする際に、リポジトリにそのようなオブジェクトが既に存在しないかどうかを確認しました(IDが自動生成されてからID以外のすべてのフィールドを比較する必要があり、値による比較が必要でした)。私のシステムはユニークです)。 更新された場合、更新日は現在の日付に変更されました。 これが行われた後、私は現在の日付より前の更新日のエンティティを単に削除しました。空想的な方法ではなく、かなり遅いですが、うまくいきます。

+0

「春」は、データの永続化を行いませんがある、JPAはありません。 JPAエンティティと永続化コードテーブルを定義しない –

答えて

0

エンティティを使用している場合は、Spring CRUDリポジトリを使用できます。それらには、エンティティのリストを受け取るsave()というメソッドがあります。エンティティのIDがすでに存在する場合、リポジトリはそれを更新し、それ以外の場合はデータベースに新しいレコードを作成します。

春のドキュメントhereをご覧ください。

投稿があなたに役立つかどうかお知らせください。

+0

あなたの返信ありがとう!私はCRUDリポジトリを広範囲に使用しますが、save()メソッドは新しいリストに表示されない行を削除しません。 – centydev

+0

データベーステーブルがキーと値のペアを表していない限り、削除機能を含める場合は、独自の機能を実装する必要があります。この点を確認できるのは、https:// stackoverflowです。 .com/questions/7525320/how-to-add-a-mapstring-person-in-entity-class @CollectionTableを使用するJPAは適切なケースでデータを追加、削除、または更新します。 –

0

JPAからEntityManagerを使用している場合、entityManager.merge(yourEntity)を使用できます。このIDはデータベースidに対応していない場合は新しい行を追加します。そうでない場合はフィールドを更新します。

またセッション(そのSessionFactoryの休止状態)からの一般的な方法があり、方法session.saveOrUpdate(yourEntity)

+0

お返事ありがとうございます!しかし、私が懸念している限り、これらの両方で新しいリストに表示されない行は削除されません。私が間違っているなら、私を修正してください。 – centydev

関連する問題