👏

JPA(3)のEntityManagerとEntityFactoryについて

2022/12/13に公開

初めまして、Junior Back-end Developer、SIMOKITAZAWAです。
色々と足りないところがあるかと思いますがよろしくお願い致します。

私がZENNを始めた理由は、

  1. 私が勉強したことをまとめたい
  2. 勉強の内容を共有して一緒に成長したい
  3. 私が間違って理解している部分について先輩たちに教えてもらいたい

    このような理由で始めることになりました。
    たくさんの教えをお願いします。

JPAのPersistenceについて

JPAを理解するためには、RDMSはpersistent contextについて理解することが必要です。
SpringBootを利用しないどxml fileを作って設定する必要があります。

  1. PersistenceはMETA-INF/persistence.xmlの設定を参考します。
  2. PersistenceはEntityMangerFactoryを作ります。
  3. EntityManagerFactoryは、必用するたびにEntityManagerを生成します。

EntityMangerFactoryとEntityManager

  1. UserのRequestが来るたびに、EntityFactoryはEntityManagerを生産します。
  2. EntityManagerはWeb Applicationの内部にあるConnection poolでConnectionを取ってDBと連結します。

この流れでJPAは動きます、これからはコードで確認してみましょう

  1. PersistenceからEntityManagerFactoryを作ります。
  2. EntityManagerFactoryからEntityManagerを生産します。
  3. EntityManagerからTransactionを取って、Transactionを始めます。

上にイメージを見ると、Itemを設定した後にEntityManagerを利用してPersistします。また、PersistしたObjectをTransactionでCommitすることでDBにItemが確認できます。



DBにjpaMacbookが入っているのが確認でき、queryも見えます。

修正する時には

em.findでItemを探し、そのItemのNameをSetします。
登録のようにPersistを作成しなくても修正ができます。確認してみましょう。



DBにDataも修正でき、update queryが作成していることも見えます。
修正する時にはem.persistしなくても大丈夫な理由は、Java Collectionのように作られたからです。

削除することは
em.find()で探したItemをem.deleteで削除できます。

ここで注意点があります。
JPAはTransactionの中に行われないとqueryは作成されない、DBにも行かないことです。

persistent contextとは?

辞書的な意味で"持続性、永続性、永続的な、いつまでも続く"という意味です。
この意味のまま、Entityを"持続性、永続性、永続的な"にSaveすることです。
しかし、DBに保存する意味ではなく、Entityをpersistent contextに保存するという意味です。
persistent contextは目で確認できません。
難しい概念かもしれませんが、Entity Managerを通じてのみアクセスできる空間です。

次はEntityの4つの状態について勉強します。

Discussion