持続性コンテキスト
🔎 永続性コンテキストとは?
エンティティを永続的に格納する環境を示します.エンティティーマネージャからアクセスできます.
🔹 使用例
em.persist(member);
->persist()メソッドを使用してemを使用してメンバーエンティティを永続コンテキストに保存します.エンティティのライフサイクル
エンティティのライフサイクルには4つのステータスがあります.
<エンティティライフサイクル図>
1.非永続(new/transient)
🔹 例
Member meber = new Member();
member.setId("member1");
member.setUsername("회원1");
2.永久(管理)EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
em.persist(member); // 영속 상태
3.準零速(分離)呼び出し
em.detach(member);
4.削除(削除)em.remove(member);
永続性コンテキストのフィーチャー
永続性コンテキストは、エンティティを識別子値(@Idをテーブルのプライマリ・キーにマッピング)に分割します.すなわち、永続状態には識別子値が必要である.
永続性コンテキストの利点
1.メインキャッシュ
:永続コンテキストの内部キャッシュ、永続状態のエンティティがここに格納されます.
Member member = new Member();
member.setId("member1");
member.setUsername("회원1");
em.persist(member); //1차 캐시에 저장
Member member = em.find(Member.class, "member1"); //1차 캐시에서 조회, 기본 키 값인 id로 조회
2.同一性の保証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.変更の検出更新
永続性コンテキストへの変更をデータベースに反映します.
リフレッシュが発生した場合
1.変更動作の検出
2.変更後のエンティティは、変更クエリーを作成し、書き込み遅延のSQLリポジトリに登録します.
3.SQLリポジトリへの書き込み遅延クエリをデータベースに送信します.(クエリーの登録、変更、削除)
永続性コンテキストをリフレッシュします.
->コミット前に同期するだけです.
じゅんれんぞくじょうたい
永続性コンテキストによって管理される永続性ステータスを持つエンティティは、永続性コンテキストで分離されています.この場合、エンティティは永続性コンテキストで提供される機能を使用できません.
また、データベースには反映されません.
準永久状態にする方法
準永久状態の特徴
출처 : 인프런 김영한 - 자바 ORM 표준 JPA 프로그래밍(기본편)
Reference
この問題について(持続性コンテキスト), 我々は、より多くの情報をここで見つけました https://velog.io/@jejjang/영속성-컨텍스트Persistence-Contextテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol