JPA持続性コンテキスト
永続性コンテキストの利点
メインキャッシュの表示
Member member = new Member(); // entity 생성(비영속 상태)
member.setId("member1");
member.setUsername("username1");
em.persist(member); // entity 1차 캐시에 저장(영속 상태)
Member member1 = em.find(Member.class, "member1");// 1차 캐시에서 조회
データベースの問合せ
Member member2 = em.find(Member.class, "member2");
クライアントリクエストによってビジネスロジックが終了すると、永続性コンテキストがクリアされると、プライマリキャッシュも失われます.つまり、その短い瞬間だけメリットがあるということです.複数のユーザーが使用するキャッシュではありません.
コンシステンシ保証
集合クエリーと同様に、JPAは永続的なエンティティの一貫性を保証します(プライマリ・キャッシュがあるため).
Member memberA = em.find(Member.class, "member1");
Member memberB = em.find(Member.class, "member1");
memberA == memberB; // true
書き込み遅延
em.persist(memberA);
em.persist(memberB); // 아직 insert query를 디비로 보내지 않음
transaction.commit(); // commit할 때 디비로 query 전송
トランザクションをコミットすると、書き込みが遅延したSQLリポジトリのクエリはリフレッシュに伴って消えます.その後、実際のDBトランザクションがコミットされます.ここにはバッファ機能があります.
エンティティが永続化されるたびにDBにクエリーが発行される場合、最適化の余地はありません.
実際、データベースにどれだけデータを入れても、コミットしないとDBは反映されません.したがって、コミット前にINSERTを入力するだけでよい.
コミットする前に、上記の例から、書き込みが遅延しているSQLリポジトリには、クエリーが山積みになっており、クエリーを一度に解放することができます.これを可能にしたのはJDBC batch
batchを使用するとコードが複雑になりますが、Hibernateはbatch sizeオプションとして使用できます.
更新
flush
flushとは、永続性コンテキストの変更をデータベースに反映する操作です.
いつまでも続く
じゅんれんぞくじょうたい
準永久状態にする方法
参考:金英漢のJPA講義
Reference
この問題について(JPA持続性コンテキスト), 我々は、より多くの情報をここで見つけました https://velog.io/@xohoonx2/JPA-이점テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol