- JPA
- Java Persistence API
- 자바 애플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스
- 영속성 컨텍스트
- EntityManagerFactory
- 엔티티매니저를 생성하기 위한 클래스
- 하나만 생성해서 애플리케이션 전체에서 공유해야 함
- EntityManager
- 엔티티를 관리하는 역할을 수행하는 클래스
- 엔티티 매니저 내부에 영속성 컨텍스트라는 걸 두어서 엔티티들을 관리한다.
- 영속성컨텍스트
- 모든 엔티티매니저가 초기화 및 종료되지 않은 한 엔티티를 영구히 저장하는 환경
- 엔티티 생명주기
- 비영속(new/transient) : 영속성 컨텍스트와 전혀 관계가 없는 상태
- 엔티티 객체를 생성했을 때 아직 저장하지 않은 순수한 객체 상태
- 영속성 컨텍스트나 데이터베이스와는 전혀 관련이 없는 순수한 객체 상태
- 영속(managed) : 영속성 컨텍스트에 저장된 상태
- 영속성 컨텍스트에 의해 관리됨
- persist() : EntityManager를 통해 엔티티를 영속성 컨텍스트에 저장한 상태
- find(), JPQL을 사용해서 조회한 엔티티도 영속성 컨텍스트가 관리
- 준영속(detached) : 영속성 컨텍스트에 저장되었다가 분리된 상태
- detach()로 영속성 컨텍스트가 관리하던 엔티티를 영속성 컨텍스트가 관리하지 않게 함
- close()로 영속성 컨텍스트를 닫음
- clear()로 영속성 컨텍스트를 초기화함
- 삭제(removed) : 삭제된 상태
- remove()를 호출하는 순간 엔티티를 영속성 컨텍스트와 데이터베이스에서 삭제
- 이렇게 삭제된 엔티티는 재사용하지 말고 자연스럽게 가비지 컬렉션의 대상이 되도록 두는 게 좋음
- 엔티티 매핑
- @Entity 애노테이션이 붙은 클래스 = 엔티티
- 연관관계 매핑
- 고급매핑
- 프록시
- 지연 로딩 기능을 사용하려면 실제 엔티티 객체 대신에 데이터베이스 조회를 지연할 수 있는 가짜 객체가 필요한데 이것을 프록시 객체라고한다.