• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

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

20.06.12 19:53 작성 조회수 2.4k

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()를 직접 호출하는 경우는 거의 없습니다.

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

감사합니다.

hongpiglet1995님의 프로필

hongpiglet1995

2023.01.06

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

안녕하세요. hongpiglet1995님

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

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

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

감사합니다.

4

개발자님의 프로필

개발자

질문자

2020.06.13

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