영속성 컨텍스트 3

[JPA] 영속성 컨텍스트 (Persistence Context) - (3)

플러시 (Flush) 플러시는 영속성 컨텍스트의 변경 내용을 데이터베이스에 반영하는 기능을 한다. 트랜잭션이 커밋될 때, 플러시가 동작해 쓰기 지연 SQL 저장소에 쌓아뒀던 쿼리들을 데이터베이스에 전송한다. 즉, 영속성 컨텍스트와 데이터베이스를 동기화하는 작업이다. ※ 플러시가 발생해도 1차 캐시 안의 내용은 삭제되지 않는다. 직접 호출 (em.flush()) //영속 상태인 member 엔티티 Member member = new Member(200L, "A"); em.persist(member); //플러시를 직접 호출하면 쿼리가 플러시 호출 시점에 전송됨 em.flush(); transaction.commit(); JPQL 쿼리 실행 시 호출 JPQL 쿼리를 실행하는 다음 코드를 보자. em.pers..

JAVA/JPA 2021.03.31

[JPA] 영속성 컨텍스트 (Persistence Context) - (2)

1차 캐시 (First Level Cache) 1차 캐시는 영속성 컨텍스트 내에 존재하는 캐시이다. 영속성 컨텍스트에 엔티티가 저장되는 순간, 1차 캐시에 다음과 같은 형태로 저장된다. { key : @Id로 선언한 필드 값, value : 해당 엔티티 } find()가 호출되는 순간, EntityManager 내부의 이 1차 캐시를 먼저 탐색하게 된다. 이 때, 찾는 엔티티를 발견했다면 즉시 반환한다. 만약 1차 캐시에 해당 엔티티가 존재하지 않는다면, 데이터베이스에서 조회한다. ※ 1차 캐시는 Global하지 않다. 즉, 영속성 컨텍스트끼리 이 1차 캐시를 공유하지 않는다. 객체의 동일성 보장 영속성 컨텍스트는 영속 상태의 엔티티들에 대한 동일성(Identity)을 보장한다. 1차 캐시에 의해, me..

JAVA/JPA 2021.03.30

[JPA] 영속성 컨텍스트 (Persistence Context) - (1)

영속성 컨텍스트 (Persistence Context) 영속성 컨텍스트는 JPA에서 매우 중요한 개념으로, 엔티티를 영구 저장하는 환경이라는 의미를 가진다. 영속성 컨텍스트는 논리적인 개념이다. 즉 실제로 존재하는 개념이 아니며, 우리는 코드 내에서 영속성 컨텍스트에 EntityManager을 통해 접근한다. JPA는 매 요청마다 EntityManagerFactory에서 EntityManager를 생성한다. 이렇게 생성된 EntityManager는 내부적으로 DB 커넥션 풀을 사용해 데이터베이스와 연동된다. 스프링에서 EntityManager를 주입받아 사용할 때, 같은 트랜잭션 범위의 EntityManager들은 동일 영속성 컨텍스트에 접근한다. 엔티티의 생명주기 (Entity Lifecycle) 비영..

JAVA/JPA 2021.03.30