JPA란?

자바 객체를 CRUD문을 작성해서 이를 SQL문으로 변환하는 작업을 반복해야 하는데…

이를 해결하기 위해 나온 기술 → ORM

객체는 객체지향적으로, 데이터베이스는 데이터베이스대로 설계하고 ORM이 중간에서 두개를 매핑한다!

이러한 ORM 기술의 표준명세로 자바에서 제공하는 것이 JPA임

동작 방식

데이터베이스 테이블에 대응하는 클래스 : Entity

@Entity가 붙은 클래스를 JPA에서 관리해줌

엔티티 매니저 팩토리는 앤티티 매니저 인스턴스를 관리하는 주체

애플리케이션 실행 시 하나만 만들어지며, 요청이 오면 엔티티 매니저 팩토리로부터 엔티티 매니저 생성함

엔티티 매니저는 영속성 컨텍스트에 접근하여 엔티티에 대한 데이터베이스 작업을 제공함

내부적으로 데이터베이스 커넥션 사용해서 데이터베이스에 접근

영속 상태 (managed)→ 엔티티가 영속성 컨텍스트에 저장된 상태, 영속성 컨텍스트에 의해 관리됨, 영속 상태일 때 데이터베이스에 저장되지 않고, 트랜젝션 커밋 시점에서 데이터베이스에 반영됨

준영속 상태 (detached)→ 영속성 컨텍스트에 엔티티가 저장되었다가 분리된 상태

삭제 상태 (removed)→ 영속성 컨텍스트와 데이터베이스에서 삭제된 상태