JPA持続性
9620 ワード
概要
JPAを学習する過程で,最も重要な持続性概念を学習し,まとめた.
JPA持続性
持続性コンテキスト
これは、エンティティを永続的に格納する環境であることを意味します.
アプリケーションとデータベースの間にオブジェクトを格納します.エンティティマネージャを使用してエンティティを保存または照会すると、エンティティマネージャは永続性コンテキストでエンティティを保持および管理します.em.persist(car);
これは、エンティティマネージャを使用してメンバーエンティティを永続性コンテキストに格納することを意味します.
永続性コンテキストのフィーチャー
持続性コンテキスト
これは、エンティティを永続的に格納する環境であることを意味します.
アプリケーションとデータベースの間にオブジェクトを格納します.エンティティマネージャを使用してエンティティを保存または照会すると、エンティティマネージャは永続性コンテキストでエンティティを保持および管理します.
em.persist(car);
これは、エンティティマネージャを使用してメンバーエンティティを永続性コンテキストに格納することを意味します.永続性コンテキストのフィーチャー
ライフサイクル終了
画像ソース:https://blog.woniper.net/266
削除(削除)
非永続(new/transient)
エンティティオブジェクトは作成されましたが、永続コンテキストには保存されていません.
Car car = new Car();
永続(管理)
entity managerがentity持続性コンテキストに格納する状態により、持続性コンテキストによって管理されることを示す
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("hello");
EntityManager entityManager = entityManagerFactory.createEntityManager();
entityManager.persist(car);
じゅんれいそくど
永続性コンテキストによって管理される永続状態のエンティティを管理しない場合は、準永続状態に変更されます.em.detach()を呼び出して、特定のエンティティを準永続状態にします.
// 영속성 컨텍스트에서 분리해 준영속 상태로 변경
entityManager.detach(car);
// 영속성 컨텍스트를 비워도 관리되던 엔티티는 준영속 상태
entityManager.claer();
// 영속성 컨텍스트를 종료해도 관리되던 엔티티는 준영속 상태
entityManager.close();
準零速状態では以下のような特徴がある.永続コンテキスト(
削除(削除)
永続コンテキストとデータベースからエンティティを削除
entityManager.remove(car);
永続性コンテキストのフィーチャー
永続性コンテキストの識別子値
永続性コンテキストはentityを識別子値に分割します.永続状態では識別子値が必要です.
永続性コンテキストとデータベースの保存
JPAは通常、トランザクションがコミットされた瞬間に、flushと呼ばれる永続性コンテキストに新しく格納されたエンティティをデータベースに反映します.
エンティティの管理における永続性コンテキストの利点
プライマリキャッシュ
永続性コンテキストの内部には、プライマリ・キャッシュと呼ばれるキャッシュがあります.
永続的なentityはここに格納され、プライマリキャッシュのキーは識別子値(デフォルトキー)、値はentityインスタンスです.
Car car = entityManager.find(Car.class, "car1");
クエリの順序は次のとおりです.クエリーの
クエリ
永続エンティティの一貫性の確保
永続性コンテキストはentityの一貫性を保証します
Car a = entityManager.find(Car.class, "car1");
Car b = entityManager.find(Car.class, "car1");
System.out.print(a==b); //true
トランザクションの書き込み遅延をサポート
em.find(entity)を使用して保存しても、エンティティマネージャには、トランザクションがコミットされるまで内部クエリー・リポジトリでinsertクエリーが実行されます.トランザクションのコミット時に収集されたクエリーをDBに送信します.これを、トランザクションをサポートする書き込み遅延と呼びます.
変更の検出
entityを変更する場合は、クエリー後にデータを変更すればいいです.
エンティティが
EntityManager em = emf.createEntityManager();
EntityTransaction transaction = em.getTransaction();
transaction.begin();
Member member = em.find(Member.class, "member1");
member.setName("멤버1");
transaction.commit();
更新
永続性コンテキストの変更をデータベースに反映することをリフレッシュと呼びます.
永続性コンテキストのentityをクリアするのではなく、変更をデータベースに同期します.
ソース
Reference
この問題について(JPA持続性), 我々は、より多くの情報をここで見つけました https://velog.io/@flasharrow/JPA-영속성テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol