본문 바로가기

Spring/JPA

(JPA) 플러시와 준 영속 상태

플러시

jwdeveloper.tistory.com/287

 

(JPA) 영속성 컨텍스트 (1차 캐시, 동일성 보장, 지연로딩, 변경감지)

1차 캐시 1차 캐시의 과정은 세 가지 과정과 같다. 조회 시 처음 1차 캐시에 해당 데이터가 있는지 탐색을 한다. -> 만약 있으면 바로 리턴 조회 결과 1차 캐시에 데이터가 없으면 데이터베이스에

jwdeveloper.tistory.com

영속성 콘텍스트는 commit을 하는 시점에 쿼리가 날아간다고 이전 포스팅에서 언급하였다.

하나 flush를 사용하면 commit을 하는 시점이 아닌 flush를 하는 시점에 쿼리가 발생한다.

 

 

아래 코드는 flush를 하고 나서 구분을 위한 sout을 찍었다!

Member member = new Member(200l, "Member200");
entityManager.persist(member);

entityManager.flush();
System.out.println("*********");

transaction.commit();

실행결과를 보면 flush를 하고 나서 쿼리가 발생하는 것을 볼 수 있다.

flush를 사용하는 이유는 JPQL에서 찾아볼 수 있다. persist가 호출되는 시점에는 DB에 데이터가 저장이 안 된다고 하였다.
하나 persist 바로 이후에 JPQL을 실행을 한다면 DB에 저장이 안 된 시점에서 데이터를 찾기 때문에 제대로 된 데이터를 보장받을 수 없다. 이를 방지하기 위해서 JPQL은 기본적으로 flush를 제공한다.

 

  • 영속성 콘텍스트를 비우지 않는다.
  • 영속성 컨텍스트의 변경 내용을 데이터베이스에 동기화한다.
  • 트랜잭션이라는 작업 단위가 중요하다. 

준영속 상태

준영속 상태란 영속상태의 엔티티가 영속성 콘텍스트에서 분리된 상태를 의미합니다.

 

  • entityManager.detach(entitiy) : 특정 엔티티만 준영속 상태로 전환
  • entityManager.clear() : 영속성 콘텍스트를 완전히 초기화
  • entityManager.close() : 영속성 컨텍스트를 종료

 

201이라는 ID를 찾고 이름을 변경한다음 detach를 사용해보자!

Member member = entityManager.find(Member.class, 201L); // 현재는 영속상태
member.setName("jun young sok");

entityManager.detach(member);

 

select 쿼리만 나가고 update쿼리는 실행되지 않는다. 왜냐면 영속 상태가 아니기 때문에!

 

변경 전 후 달라진게 없음을 보여준다.


References

www.inflearn.com/course/ORM-JPA-Basic/dashboard 

 

자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의

JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., 본 강의는 자바 백엔

www.inflearn.com

Code Link

github.com/mike6321/Spring-JPA/commit/9ef5cb8b975272053ae847162b72f73a66d45e61#diff-e953af095260d78d6cf2e694ed8cfb6d1b4a8384e1a0844f76ce9203354dcede

 

플러시 · mike6321/Spring-JPA@9ef5cb8

 

github.com

github.com/mike6321/Spring-JPA/commit/3c357043ca27a31c793e5fc4ced6b6643f7cec67#diff-e953af095260d78d6cf2e694ed8cfb6d1b4a8384e1a0844f76ce920335 4dcede

 

준영속 상태 · mike6321/Spring-JPA@3c35704

Permalink This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository. Browse files 준영속 상태 Loading branch information Showing 2 changed files with 10 additions and 4 deletions. +10 −4 jpa-bas

github.com