JPA(Jakarta Persistence, 옛 이름 Java Persistence API)가 엔티티를 관리하는 메모리 공간. 보통 트랜잭션 하나와 수명이 같다.
- 같은 id를 두 번 조회하면 두 번째는 1차 캐시에서 같은 객체를 돌려준다
- 관리 중인 엔티티의 필드를 바꾸면
save()없이도 커밋 때 UPDATE가 나간다 → 더티 체킹 - 엔티티 상태는 비영속(transient) → 영속(managed) → 준영속(detached) → 삭제(removed). 준영속 엔티티는 변경을 추적하지 않는다
- 트랜잭션이 끝난 뒤에도 웹 요청 끝까지 열어 두는 설정이 OSIV (Open Session In View)다
stateDiagram-v2 state "비영속 (transient)" as T state "영속 (managed)" as M state "준영속 (detached)" as D state "삭제 (removed)" as R [*] --> T: new T --> M: persist() [*] --> M: find() · JPQL 조회 M --> D: detach() · clear() · close() D --> M: merge() M --> R: remove() R --> [*]: 커밋 때 DELETE
책: 7장 출석부 비유, 엔티티의 생애는 7장 세 번째 절
출처: Hibernate ORM User Guide: Persistence Contexts · Detaching an entity