← 질문 목록
#135깊이 0
같은 엔티티를 두 번 조회하면 왜 같은 객체인가?
한 영속성 컨텍스트는 엔티티 타입과 식별자별로 인스턴스를 하나만 관리한다. 이미 관리 중이면 1차 캐시에서 같은 객체를 반환한다.
코드→컨텍스트
타입과 ID로 찾는다
컨텍스트→1차 캐시
관리 객체를 확인한다
1차 캐시→코드
있으면 같은 객체를 준다
컨텍스트→DB
없으면 조회해 관리한다
JPQL은 조회 쿼리를 실행할 수 있다. 그래도 같은 식별자가 이미 관리 중이면 결과를 기존 인스턴스에 맞춰 객체 동일성을 지킨다.
이 캐시는 EntityManager 범위 안에서만 유효하다. 여러 요청이 공유하는 2차 캐시가 아니며 트랜잭션 격리도 대신하지 않는다.
clear나 detach 뒤에는 관리가 끊긴다. 긴 범위에 많은 엔티티를 쌓으면 메모리와 낡은 상태 문제가 커지므로 필요한 작업에서는 주기적으로 비워야 한다.