「持続性コンテキスト」(JPA)に進む前に


入る前に。


  • 永続性コンテキストを表示する前に、いくつかの概念を理解する必要があります.


  • 上記の画像から分かるように、この時間にconnを直接管理するのはEntityManagerが代わります.

  • このEntityManagerはEntityManagerFactoryによって作成され、作成したEntityManagerからdbにアクセスできます.

  • プロセス全体が上記のようになります.
  • 1. EntityManagerFactory


    -アプリケーションをロードするとき、データベースごとに1つしか生成できません.
    -WAS終了時にEntityManagerFactoryを閉じます.
    これにより、接続プールのリソースを内部から解放できます.
    ex)
    persistence.xml
    <persistence-unit name="hello">
            <properties>
                <!-- 필수 속성 -->
                <property name="javax.persistence.jdbc.driver" value="org.mariadb.jdbc.Driver"/>
                <property name="javax.persistence.jdbc.user" value="wcp_admin"/>
                <property name="javax.persistence.jdbc.password" value="1234"/>
                <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/wcp?serverTimezone=UTC"/>
                <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>
    上のpersistence-unitのnameに基づいてEntityManagerFactoryを作成できます
    EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("hello");

    2. EntityManager

  • EntityManagerFactoryで作成できます.
  •    EntityManager entityManager = entityManagerFactory.createEntityManager();

  • JPAは、スレッドを作成するたびにEntityManagerFactoryにEntityManagerを作成します.

  • EntityManager内部でDB接続プールを使用してデータベースに接続します.
  • トランザクションが完了したら、EntityManagerを閉じてDB接続を内部に戻す必要があります.
  •     entityManager.close();

    3. EntityTransaction


  • データの変更はTransactionで行う必要があります.

  • EntityManagerでEntityTransactionを管理できます.
  •     EntityTransaction tx = entityManager.getTransaction();
  • tx.begin(); : 開始Transaction
  • tx.commit(); : トランザクションの実行
  • tx.rollback(); :
  • 永続性コンテキストとは?


    エンティティを永続的に保存する環境

  • 上記のEntity Managerを使用してEntityを変更すると、データがすぐにデータベースにロードされるわけではありません.

  • コミット()の前に、すなわち1つのTransaction間で実行されるEntity情報は、まずこの永続性コンテキストと呼ばれる場所に格納される.
  • スプリングからEntity Managerを注入すると、同じトランザクション範囲内のEntity Managerが同じ永続性コンテキストにアクセスします.
  • ソースとコメント
  • https://velog.io/@seho100/JPA-%EC%98%81%EC%86%8D%EC%84%B1-%EC%BB%A8%ED%85%8D%EC%8A%A4%ED%8A%B8
  • https://gmlwjd9405.github.io/2019/08/06/persistence-context.html
  • https://www.inflearn.com/course/ORM-JPA-Basic/dashboard