持続性コンテキスト


🔎 永続性コンテキストとは?


エンティティを永続的に格納する環境を示します.エンティティーマネージャからアクセスできます.
🔹 使用例
em.persist(member); 
->persist()メソッドを使用してemを使用してメンバーエンティティを永続コンテキストに保存します.

エンティティのライフサイクル


エンティティのライフサイクルには4つのステータスがあります.

<エンティティライフサイクル図>
1.非永続(new/transient)
  • は、永続的コンテキストに関係なく、純粋なオブジェクト状態
  • である.
    🔹 例
    Member meber = new Member();
    member.setId("member1");
    member.setUsername("회원1");
    2.永久(管理)
  • の永続コンテキストに格納状態
  • .
  • 持続コンテキストによって管理されるステータス
  • em.find()またはJPQLでクエリされたエンティティも永続的な状態とみなされます.
  • 🔹 例
    EntityManager em = emf.createEntityManager();
    em.getTransaction().begin();
    
    em.persist(member); // 영속 상태
    3.準零速(分離)
  • は、持続性コンテキストにおいて状態
  • を格納、切断する.
    呼び出し
  • em.close()またはem.clear()は、準永続状態にすることもできます.
  • 🔹 例
    em.detach(member);
    4.削除(削除)
  • 削除済みステータス
  • 🔹 例
    em.remove(member);

    永続性コンテキストのフィーチャー


    永続性コンテキストは、エンティティを識別子値(@Idをテーブルのプライマリ・キーにマッピング)に分割します.すなわち、永続状態には識別子値が必要である.

    永続性コンテキストの利点


    1.メインキャッシュ
  • の最初のキャッシュとは?
    :永続コンテキストの内部キャッシュ、永続状態のエンティティがここに格納されます.
  • プライマリキャッシュのキー値は識別子値です.すなわち、永続性コンテキストでデータを格納およびクエリーする条件は、データベースのデフォルトキー値です.
  • em.find()が呼び出され、エンティティがプライマリキャッシュに存在しない場合、エンティティマネージャはデータベースをクエリーした後にエンティティを作成します.
  • 🔹 例-メインキャッシュに保存および表示
    Member member = new Member();
    member.setId("member1");
    member.setUsername("회원1");
    
    em.persist(member); //1차 캐시에 저장
    
    Member member = em.find(Member.class, "member1"); //1차 캐시에서 조회, 기본 키 값인 id로 조회
    2.同一性の保証
  • em.find(Member.class,member 1)が繰り返し呼び出された場合でも、永続性コンテキストはプライマリキャッシュ内の同じエンティティインスタンスを返します.
  • Member a = em.find(Member.class, "member1");
    Member b = em.find(Member.class, "member1");
    
    System.out.println(a==b); //true 반환
    3.トランザクション書き込み操作をサポートする書き込み遅延
    transction.begin(); //트랜잭션 시작
    
    em.persist(member1); 
    em.persist(member2); //persist 할 때는 쓰기 지연 저장소에 차곡차곡 쌓아둠. 
      		     //즉, INSERT SQL을 데이터베이스에 보내지 않는다.
    
    transaction.commit(); // 트랜잭션 커밋 = 버퍼링 같은 기능
      		      // 커밋하는 순간 데이터베이스에 INSERT SQL을 보낸다.
    4.変更の検出
  • エンティティの変更をデータベースに自動的に反映する機能があります.
  • 5.遅延ロード

    更新


    永続性コンテキストへの変更をデータベースに反映します.
    リフレッシュが発生した場合
    1.変更動作の検出
    2.変更後のエンティティは、変更クエリーを作成し、書き込み遅延のSQLリポジトリに登録します.
    3.SQLリポジトリへの書き込み遅延クエリをデータベースに送信します.(クエリーの登録、変更、削除)
    永続性コンテキストをリフレッシュします.
  • em.flush-ダイレクトコール(変更をすぐに反映)
  • トランザクションコミット-自動コール
  • をリフレッシュ
  • JPQLクエリーの実行-自動呼び出しのリフレッシュ
  • リフレッシュのキー
  • 永続コンテキストを空にするのではなく、永続コンテキストの変更をデータベースに同期します.
  • 取引という職場が重要です.
    ->コミット前に同期するだけです.
  • じゅんれんぞくじょうたい


    永続性コンテキストによって管理される永続性ステータスを持つエンティティは、永続性コンテキストで分離されています.この場合、エンティティは永続性コンテキストで提供される機能を使用できません.
    また、データベースには反映されません.
    準永久状態にする方法
  • em.detach(entity):特定のエンティティのみが準持続状態に変換される
  • em.clear():永続性コンテキストを完全に初期化
  • すべてのプライマリキャッシュをクリア
  • em.close():持続コンテキスト
  • を終了
    準永久状態の特徴
  • はほぼ非零速状態に近い.
  • は既にゼロ速度状態にあるため、識別子値を有する.
  • のロードを遅らせることはできません.
  • マージ→マージ()
  • は、準永久状態にあるシンボルを再び永久状態にする
  • である.출처 : 인프런 김영한 - 자바 ORM 표준 JPA 프로그래밍(기본편)