Java Persistence Api의 약자로, 자바의 ORM을 위한 표준 기술
내부적으로 Hibernate, Spring Jpa와 같은 구현체가 있고 이것의 표준 인터페이스가 JPA이다.
ORM?, 자바의 객체와 관계형 DB를 매핑하는 것으로, DB의 특정 테이블이 자바의 객체로 매핑되어 SQL을 일일이 작성할 필요없이 객체로 구현할 수 있도록 하는 프레임워크
1. 1차캐시
- 영속성 컨텍스트 내부에 존재하는 캐시를 통해서 영속상태의 Entity는 모두 이곳에 저장된다.
- 키(@ID) , Value형태로 저장되며 특정 엔티티를 검색할 때 먼저 1차 캐시에서 Entity를 찾고 이후 DB에서 조회후 1차 캐시에 저장하고 영속 상태인 해당 객체를 반환
2. 객체의 동일성 보장
- 같은 엔티티를 여러번 조회하더라도 영속성 컨텍스트의 1차 캐시에 해당 엔티티가 저장되어 있기에 동일한 엔티티를 반환
3. 트랜잭션을 지원하는 쓰기 지연을 수행
- EntityManager는 트랜잭션을 commit하기 진전까지 데이터베이스에 Entity를 저장하지 않고 영속성 컨텍스트 내부의 SQL 저장소에 생성 쿼리를 저장
- 이 후, 성공적으로 트랜잭션이 commit을 하게 되면 저장해 두었던 쿼리를 한꺼번에 데이터 베이스에 보낸다.
- 따라서, 중간에 어떠한 에러가 발생하더라도 DB에 즉각적으로 반영되지 않아 동일성이 보장된다.
4. 변경 감지
- 트랜잭션을 commit하는 시점에 1차 캐시의 스냅샷에 저장되어 있는 엔티티와 변경된 엔티티를 비교하여 변경된 부분을 찾아 update 쿼리를 날림