TIL-211027


1.JPA一括演算

  • バッチ演算は、永続性コンテキストをクエリーするのではなく、直接データベースにクエリー
  • を実行する.
  • バッチの計算が完了すると、まず永続性コンテキストを問い合わせるJPQLの結果とは異なる場合があります.
    本体計算時の注意事項

    2. HTTP Method - Put VS Patch

  • Put:リソースの作成/交換.リソース内のすべてのフィールドが必要です
    等性
  • 等性
  • RESTfulでは、リソース作成は主にPOSTを使用する
  • Patch:リソースの一部を置き換えます.
  • べき乗等性が必要でない
  • を満たす
  • jsonにnullがある場合
  • nullまたは
  • に更新
  • 無視
  • // 출처 : https://www.baeldung.com/http-put-patch-difference-spring
    
    @RequestMapping(value = "/heavyresource/{id}", method = RequestMethod.PATCH, consumes = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<?> partialUpdateGeneric(
      @RequestBody Map<String, Object> updates,
      @PathVariable("id") String id) {
        
        heavyResourceRepository.save(updates, id);
        return ResponseEntity.ok("resource updated");
    }
    変更するフィールドごとに異なるカスタムDTOを作成する必要がなく、Mapを使用してローカルに更新できます.
    http-put-patch-difference-spring

    3. JPA @DynamicUpdate


    Hibernate付き
  • JPAデフォルト動作:すべてのEntityのCRUDクエリー(すべてのプロパティ(列)からupdateクエリーを含む)
  • を作成およびキャッシュします.
    クエリは
  • Entityのすべての属性
  • を含む
    一部の属性(列)のみを変更する場合は、@DynamicUpdate を使用します.
  • JPA Entityに適用されるクラスレベル注釈
  • の欠点
  • クエリはキャッシュされず、更新された各プロパティ(カラム)に基づいて
  • が作成されます.
    Hibernaterは、
  • で変更された列を把握するためにEntityのステータスを追跡/比較します->オーバーヘッド
  • 使用例
  • Entityには多くのプロパティがあり、少数のカラムのみが頻繁に変更されます.
  • バージョン-少ないOptimic Lock(現時点では不明)
  • を使用
    spring-data-jpa-dynamicupdate
    興味深いことに、Entity(table)には多くのコラムがあると判断する基準-30個?
    約15以上のフィールドがある場合は、正規化が間違っている可能性があります.
    JPA save()