영속성 컨텍스트를 보기 전 알아야할 개념들이 있다.
위의 이미지를 보면 알다시피, 그동안 conn을 직접 관리하던 것을 EntityManager가 대신 해주는 것을 알 수 있다.
이 EntityManager는 EntityManagerFactory에서 생성을 해주며, 사용자는 생성된 EntityManager를 통해 db에 접근을 할 수 있다.
전반적인 흐름은 위와 같다.
<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"/>
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("hello");
EntityManager entityManager = entityManagerFactory.createEntityManager();
JPA는 스레드가 하나 생성될 때 마다(Transaction 단위를 수행할 때마다) EntityManagerFactory에서 EntityManager를 생성한다.
EntityManager는 내부적으로 DB 커넥션 풀을 사용해서 DB에 붙는다.
entityManager.close();
Data 를 변경하는 모든 작업은 반드시 Transaction 안에서 이루어져야 한다.
EntityManager를 통해 EntityTransaction를 관리할 수 있다.
EntityTransaction tx = entityManager.getTransaction();
엔티티를 영구 저장하는 환경
위의 EntityManager를 사용해 Entity를 변경한다해서 바로 DB에 data가 적재되는 것은 아니다.
commit()를 하기 전 즉, 하나의 Transaction 사이에서 실행되는 Entity 정보들은 이 영속성 컨텍스트(Persistence Context)라는 곳에 먼저 저장된다.
출처 및 참고