- Java Persistence API
- java 진영의 ORM 표준 스펙
여기서 Persistence 즉 영속성이 등장함을 알 수 있다. 자세히 알아보자
데이터를 생성한 프로그램의 실행이 종료되더라도 사라지지 않는 데이터의 특성
JPA은 연속성 컨텍스트(persistence context)에 엔티티를 영구 저장하여 관리한다.
- 엔티티를 영구 저장하는 환경
- 엔티티 매니저 한 개 생성시에 한 개의 영속성 컨텍스트가 생성됨
- 엔티티 매니저를 통해 접근과 관리
1차 캐시와 동일성 보장
동일한 트랜잭션에서 조회한 엔티티는 같음을 보장한다.
엔티티 조회시에 영속성 컨텍스트 내부의 1차 캐시에서 조회 하고 , 없는경우 데이터베이스에서 조회하여 1차캐시에 저장한다.
결론적으로 1차 캐시에 있는 동일한 엔티티를 반환하기 때문에 entity1==entity2 의 동일성이 보장된다.
트랜잭션을 지원하는 쓰기 지연 (transactional write-behind)
트랜잭션 커밋때까지 Insert SQL을 버퍼에 모아두고 배치 전송을 한다.
변경 감지 (Dirty checking)
컨텍스트 내에 변경이 감지되면 flush시에 Update SQL를 날린다. 자세히
지연로딩과 즉시 로딩
@ManyToOne(fetch = FetchType.LAZY)
@ManyToOne(fetch = FetchType.EAGER)
(default)영속성 컨텍스트의 변경내용을 데이터베이스에 반영
(보통은 transaction commit시 자동호출 되고 있었던것..!)