인프런 커뮤니티 질문&답변

개발자님의 프로필 이미지

작성한 질문수

자바 ORM 표준 JPA 프로그래밍 - 기본편

즉시 로딩과 지연 로딩

예제에서 em.flush(); em.clear();하는 특별한 이유가 있나요?

작성

·

3.1K

0

Team 과 Member를 persist 한 뒤

em.flush();

em.clear(); 

를 하는 특별한 이유가 있나요?

답변 2

8

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 개발자님^^

persist()를 하고 em.find()를 바로 호출하면, 조회 쿼리를 볼 수 없습니다.

영속성 컨텍스트에 있는 데이터를 가지고 오기 때문이지요.

반면에 em.flush(), em.clear()를 하면 DB에 데이터를 반영하고, 영속성 컨텍스트를 지웁니다.

그러면 em.find()를 호출하면 영속성 컨텍스트에 없으니 db에서 조회하고, 조회 쿼리를 볼 수 있습니다.

실무에서는 em.flush(), em.clear()를 직접 호출하는 경우는 거의 없습니다.

강의에서는 단순히 설명을 편리하게 하기 위해 이런 방식을 선택했습니다.

감사합니다.

혹시 보실지는 모르겠지만 실무에서 em.flush(), em.clear()를 직접 호출하지 않는 이유가 있나요? ㅠㅠ

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. hongpiglet1995님

조금 더 공부를 해보시면 아시겠지만, 트랜잭션을 커밋할 때 자동으로 플러시가 발생합니다^^

그리고 트랜잭션의 범위를 넘어서게 되면 자동으로 영속성 컨텍스트가 종료됩니다.

따라서 이런 부분을 수동으로 하는 일은 거의 없습니다.

감사합니다.

4

개발자님의 프로필 이미지
개발자
질문자

답변 감사합니다.  이해하는데 많은 도움이 됬습니다.