자바 객체를 CRUD문을 작성해서 이를 SQL문으로 변환하는 작업을 반복해야 하는데…
이를 해결하기 위해 나온 기술 → ORM
객체는 객체지향적으로, 데이터베이스는 데이터베이스대로 설계하고 ORM이 중간에서 두개를 매핑한다!
이러한 ORM 기술의 표준명세로 자바에서 제공하는 것이 JPA임
데이터베이스 테이블에 대응하는 클래스 : Entity
@Entity가 붙은 클래스를 JPA에서 관리해줌
엔티티 매니저 팩토리
는 앤티티 매니저 인스턴스를 관리하는 주체
애플리케이션 실행 시 하나만 만들어지며, 요청이 오면 엔티티 매니저 팩토리로부터 엔티티 매니저 생성함
엔티티 매니저
는 영속성 컨텍스트에 접근하여 엔티티에 대한 데이터베이스 작업을 제공함
내부적으로 데이터베이스 커넥션 사용해서 데이터베이스에 접근
영속 상태 (managed)→ 엔티티가 영속성 컨텍스트에 저장된 상태, 영속성 컨텍스트에 의해 관리됨, 영속 상태일 때 데이터베이스에 저장되지 않고, 트랜젝션 커밋 시점에서 데이터베이스에 반영됨
준영속 상태 (detached)→ 영속성 컨텍스트에 엔티티가 저장되었다가 분리된 상태
삭제 상태 (removed)→ 영속성 컨텍스트와 데이터베이스에서 삭제된 상태