DBMS에도 여러 종류가 있듯 ORM에도 여러 종류가 있다. 자바에서는 JPA를 표준으로 사용한다. JPA는 자바에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스인데, 실제 사용을 위해서는 ORM 프레임워크 구현체를 선택해야한다. 대표적으로 하이버네이트를 많이 사용한다.
JPA에서는 엔티티 매니저와 영속성 컨텍스트라는 중요한 컨셉이 존재한다.
[엔티티]
엔티티는 DB 테이블과 매핑되는 객체이다.
[엔티티 매니저]
엔티티 매니저는 엔티티를 관리해 DB와 애플리케이션 사이에서 생성, 삭제, 수정 등의 역할을 한다. 이러한 엔티티 매니저를 생성해주는 것이 엔티티 매니저 팩토리이다. 팩토리는 스프링 내부에서 하나만 생성하고 관리한다.
엔티티 매니저는 엔티티를 영속성 컨텍스트에 저장한다. 영속성 컨텍스트는 JPA의 중요한 특징 중 하나로, 엔티티를 관리하는 가상의 공간이다.
[1차 캐시]
영속성 컨텍스트는 내부에 1차 캐시를 가지고 있다. Id값을 기준으로 캐시에 값이 있으면 DB를 조회하지 않고, 없으면 DB를 조회해서 저장해둔다.
[쓰기 지연]