JPAコンセプト


概要


Java Persistence APIはオブジェクト関係管理(ORM)の技術標準であり、最近のSpring Boot教材から見ると技術規格である.
Springフレームワークを使用してプロジェクトを行ったことがある人は、Spring JDBC TemplateまたはMybatisを使用してデータベース関連の操作を実行したことがあります.これらの操作では、DBを使用してオブジェクトをテーブルにマッピングします.
しかし、プロジェクト規模が拡大するにつれて、オブジェクトとテーブルをマッピングするために重複して冗長なJDBC APIが呼び出され、コードの可読性とメンテナンス効率が低下します.また、開発者がオブジェクトをデータベースに保存するためにテーブルを設計するのに時間がかかります.
これにより、重要なビジネスロジックのテストに要する時間が短縮され、深刻なエラーが発生し、悪循環が発生します.
これらの問題を解決するために、Java陣営でORMを定義する技術基準JPAが誕生した.複数のJPA実装があるが、代表的な実装はHibernateである.

JPAは2つの大きな機能を提供しています.
  • マッピングエンティティとテーブルの設計部分
  • 実際にマッピングされたシンボル部分
  • が使用する.
    前述したエンティティは単純にクラスであるが、クラスではなくテーブルにマッピングすることをJPAに伝え、アプリケーション@Entityのクラスをエンティティと呼ぶ.
    マッピングされたエンティティは、エンティティマネージャを介してPersistence Contextに管理されます.
    @Getter
    @Setter
    @ToString
    @Entity // Database 테이블과 매핑될 클래스를 엔티티로 지정
    @Table(name = "tbl_members") // 테이블명을 지정함, 생략시 클래스명으로 테이블명됨
    @EqualsAndHashCode(of = "uid")
    public class Member {
    
        @Id //@Id가 적용된 맴버변수는 실제 매핑될 테이블의 식별자 값인 PK를 의미한다.
        private String uid;
        private String upw;
        private String uname;
    }
    エンティティーマネージャは、エンティティーに関連するすべてのことを処理します.たとえば、エンティティーの保存、変更、削除、クエリーなどです.開発者にとって、これはエンティティを格納する仮想データベースです.

    エンティティーマネージャファクトリおよびエンティティーマネージャ



    1つのDBのみを使用するアプリケーションは、1つのEntityManagerFactoryのみを生成します.EntityManagerを生成するために、META−INF/Epersistence.xmlという名前のクラスパスの設定情報を使用してEntityManagerFactoryを作成する必要があります.
    // 엔터티매니저 팩토리를 생성
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpabook");
    //엔터티매니저를 생성
    EntityManager em = emf.createEntityManager();
    EntityManagerFactoryを作成するのにかなりのコストがかかるため、1つだけ作成してアプリケーション間で共有するように設計されています.EntityManagerを生産するコストは低い.EntityManagerは、永続性コンテキストでEntityを管理します.この構造を理解することは、JPAを理解する上で最も重要です.永続性コンテキストは、エンティティを永続的に格納する環境です.

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


  • 非永久状態
  • Member member = new Member();
    member.setId("member1");
    member.setUsername("회원1");
    非永続状態はソリッドオブジェクトを作成しますが、まだ純粋なオブジェクトの状態であり、保存されていません.これは、永続性コンテキストまたはDBとはまったく無関係であるため、非永続状態と呼ばれます.
  • 永続状態
  • //비영속 상태인 member 인스턴스를 영속상태로 변경
    em.persist(member);
    永続状態は、エンティティがエンティティマネージャを介して連続性コンテキストに格納および管理される状態です.これで、メンバーエンティティは非永続状態から永続状態に変わります.**em.find()**またはJPQLクエリを使用するエンティティも、永続性コンテキストによって管理される永続状態です.
  • 準零速状態
  • em.detach(member);
    永続コンテキストが永続状態のエンティティを管理しなくなった場合、準永続状態は準永続状態になります.エンティティを準永続状態にする場合は、em.datach()、永続コンテキストを閉じるem.close()、および永続コンテキストを初期化するem.clear()を呼び出すと、永続状態にあるエンティティは準永続状態になります.
  • 削除状態
  • em.remove(member);
    削除すると、永続コンテキストとデータベースからエンティティが削除されます.
    ソース:https://velog.io/@sa 1341/JPA-コンセプト
    Java ORM標準JPAプログラミング(金英漢著)