EntityManagerFactory
JPA를 구동하려면 EntityManagerFactory를 하나만 생성해서 애플리케이션 전체에서 공유를 하게 된다.
이 때, persistenceUnitName을 인자로 받게 된다.
해당 인자는 우리가 persistence.xml에서 작성했던 "hello"이다.
정리하면 JPA가 실행될 때, persistence.xml을 정보들을 조회하여 EntityManagerFactory를 생성하고
emf가 EntityManager들을 생성하면서 JPA가 실행된다.
EntityManager
트랜잭션 단위로 실행된다. 이 말은 트랜잭션이 끝나면 버려야 한다.
예를 들어 고객 요청이 올 때마다 생성되고 요청이 끝나면 버린다.
JPA의 데이터 변경은 트랜잭션 단위로 실행
아래의 코드를 보면 알겠지만 트랜잭션 없이 실행을 하게 되면 JPA가 실행되지 않는다.
코드를 실행하면 H2 db에 테이블 생성 쿼리가 나가지 않게 된다.
그래서 JPA는 트랜잭션 단위가 매우 중요하고
데이터를 변경하는 모든 작업은 트랜잭션 안에서 실행되야한다.
위와 같이 코드를 작성하고 실행하면 create table 쿼리가 나가게 된다.
JPA를 사용하여 조회, 수정, 삭제
JPA를 사용하여 DB에 데이터를 조회할 때는 JPQL이라는 SQL과 비슷하여 쿼리를 작성하여 조회하는 방법이 있고,
find 메서드를 사용하여 조회하는 방법이 있다.
조회 : find는 인자로 조회하려는 데이터의 객체 type과 PK를 갖는다.
삭졔 : find를 사용하여 객체를 얻게 되면, remove라는 메서드를 통해 데이터를 삭제할 수 있다.
조회 : 조회에서는 신기한 것이 있다. 우리가 데이터를 저장할 때, em.persist를 사용하여 데이터를 저장한다.
그러나 EntityManager를 객체 다루듯이 생각을 해보자. 우리는 객체에서 데이터를 변경할 때, 따로 저장하지 않고,
데이터 값만 변경해준다. EntityManager도 비슷하다.
따로 persist를 사용하지 않고 setXXX를 이용하여 변경하면 update 쿼리가 나가게 된다.
즉, jpa가 트랜잭션이 끝날 때, 변경사항을 알아내어 update 쿼리를 만들어서 바꾸게 되는 것이다.
Reference
'Spring 강의 > JPA - 기본편' 카테고리의 다른 글
고급 매핑 (0) | 2021.12.07 |
---|---|
다양한 연관관계 매핑 (0) | 2021.12.02 |
연관관계 매핑 기초 (0) | 2021.11.29 |
앤티티 매핑 (0) | 2021.11.20 |
영속성 관리 - 내부 동작 방식 (0) | 2021.11.19 |