작성
·
159
0
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
정민교님의 질문에 대한 답변은 다음과 같습니다.
persist
메소드를 실행할 때 영속성 컨텍스트의 1차 캐시에 엔티티가 저장됩니다. 저장하는 과정에서 엔티티의 상태가 스냅샷으로 기록되어 변경 감지(Dirty Checking)에 사용됩니다.
find
메소드를 사용해서 데이터베이스에서 엔티티를 가져올 때, 해당 엔티티가 1차 캐시에 없다면 데이터베이스에서 조회한 후 엔티티를 1차 캐시에 저장하며, 이때의 엔티티 상태가 스냅샷으로 기록됩니다.
JPQL을 실행할 때, JPQL은 기본적으로 1차 캐시를 확인하지 않고, 바로 쿼리를 데이터베이스로 전송합니다. 하지만, JPQL 실행 전 플러시(Flush)가 발생해 영속성 컨텍스트의 변경 내용이 데이터베이스에 반영되기 때문에, JPQL 쿼리 결과와 영속성 컨텍스트의 상태가 동기화됩니다.
그러므로, persist
호출 시 저장된 엔티티가 JPQL로 조회되지 않는 것은 아닙니다. JPQL 실행 전에 발생하는 플러시로 인해, 영속성 컨텍스트에 있는 변경 내용이 데이터베이스에 반영되므로 JPQL 쿼리 결과에 영향을 줄 수 있습니다.
답변이 정민교님의 질문에 도움이 되었길 바랍니다.