私はpersonテーブルとPerson.javaをテーブルにマッピングしています。私はPersonレコードの詳細を変更するための編集UIを持っています。編集ページでは、ユーザーは通常、一度に1つまたは2つのフィールドを変更します。私はAJAXを使用して更新呼び出しを送信し、変更されたフィールドのみを送信したい。現在、オブジェクト全体を戻しています。変更されたフィールドのみの更新テーブル
問題は、変更されたフィールドのみのデータベースの更新方法に関するバックエンドです。
UIレイヤーは、変更されたフィールドのみを持つPersonオブジェクトを作成し、残りのフィールドは初期化されません。その後、オブジェクトは永続性のためにDAOに渡されます。 DAOはどのようなフィールドが変更されているか知っていますか?どのフィールドが初期化されていないか、あるいは意図的に更新のためにnullに設定されています。現在、オブジェクト全体が来るので、すべての列を更新します。
これは岩場のように感じられます。なぜDB内の特定のフィールドを更新するだけですか?ユーザーがオブジェクト全体を表すフォームにデータをコミットしている場合は、オブジェクト全体を更新する必要があります。フィールド単位で更新すると、並行処理の競合をどのように検出して処理しますか? (たとえば、2人のユーザーが同じPersonの異なるフィールドをほぼ同時に更新します。各ユーザーの観点からは、レコード全体が正しいですが、この方法でマージすると正しくありません。 – David
レコードにはタイムスタンプがあるため並行性 –
レコードのどのフィールドでタイムスタンプが更新されましたか?結局のところ、このデザインでは、ユーザーはフィールドの一部だけを更新し、一部のフィールドは更新しませんでした。したがって、監査証跡の観点からは、ユーザーが実際に更新しなかったデータをユーザーが更新したことを記録します。 – David