Java Persistence API
Java 진영에서 사용하는 ORM(Object Realation Mapping) 기술의 표준
Jakarta Persistence 라고도 함
기술 표준 ➡️ 인터페이스로 정의 ➡️ JPA 구현체는 따로 있음❗️
JPA 구현체 : Hibernate ORM, EclipseLink, DataNucleus 등
Persistence : 영속성, 지속성
➡️ JPA에서 테이블과 매핑되는 엔티티 객체 정보를 애플리케이션 내에서 오래 지속되게 하기 위해서 Persistence Context 에 저장
➡️ 저장, 수정, 조회, 삭제 등에서 사용
✔️ 1차 캐시 : 엔티티 저장
✔️ 쓰기 지연 SQL 저장소 : SQL 쿼리문 저장
✔️ 스냅샷 : 엔티티를 저장할 때, 컬렉션으로 또 다른 복사본을 저장하는 것. 후에 1차 캐시 엔티티와 비교하여 변경사항 UPDATE
@Entity
➡️ JPA에서 엔티티 클래스로 인식@Id
: 테이블의 PK@GeneratedValue
: PK 값을 위한 자동 생성 전략 명시 JPA의 영속성 컨텍스트를 관리하는 클래스
void persist(Object entity)
✔️ 영속성 컨텍스트의 1차 캐시에 엔티티 객체 저장
✔️ 쓰기 지연 SQL 저장소에 INSERT 쿼리
등록
<T> T merge(T)
✔️ 엔티티를 영속성 컨텍스트로 merge
void remove(Object entity)
✔️ 엔티티 삭제
✔️ 쓰기 지연 SQL 저장소에 DELETE 쿼리
등록
<T>T find(Class<T> entityClass, Object PK)
✔️ PK로 1차 캐시에서 조회, 없으면 테이블에서 SELECT 쿼리
로 조회
void flush()
✔️ 영속성 컨텍스트의 변경사항을 테이블에 반영
boolean contains(Object entity)
✔️ 인자로 들어온 엔티티가 현재 영속성 컨텍스트에서 관리되는 엔티티인지 체크
JPA 트랜잭션
void begin()
: 트랜잭션 시작
void commit()
: 쓰기 지연 SQL 저장소에 있는 쿼리 실행 후 제거
✔️ 내부적으로 EntitiyManager.flush()
메소드 호출, DB에 반영
void rollback()
boolean getRollbackOnly()
boolean isActive()
private EntityManager em;
private EntityTransaction tx;
tx.begin();
// 영속성 컨텍스트의 1차 캐시에 엔티티 저장, 쓰기 지연 SQL 저장소에 INSERT 쿼리 저장
em.persist(new Member());
// 쓰기 지연 SQL 저장소에 있는 쿼리문 실행 -> INSERT 쿼리 실행
tx.commit();
tx.begin();
// 영속성 컨텍스트의 1차 캐시에서 1L을 갖는 Member.class 타입 객체 검색
Member member = em.find(Member.class, 1L);
// 영속성 컨텍스트의 1차 캐시에 있는 엔티티 제거, 쓰기 지연 SQL 저장소에 DELETE 쿼리문 저장
em.remove(member);
// 쓰기 지연 SQL 저장소에 있는 쿼리문 실행 -> DELETE 쿼리 실행
tx.commit();