Spring boot 03. JPA 영속성 컨텍스트(Persistence Context)

Geun Nam Park·약 1시간 전

Spring Boot

목록 보기
4/4

영속성 컨텍스트란

JPA가 엔터티를 관리하는 공간이다.
DB ⇔ 영속성 컨텍스트 ⇔ 애플리케이션
중간에 존재하는 캐시 공간같은 느낌이다.



Entity 생명주기

JPA 엔터티는 4가지 상태를 가진다.

1. 비영속(Transient)

User user = new User();

객체만 생성된 상태


2. 영속(Persistent)

entityManager.persist(user);

영속성 컨텍스트가 관리하는 상태


3. 준영속(Detached)

entityManager.detach(user);

관리 대상에서 제외


4. 삭제(Removed)

entityManager.remove(user);

삭제 예정 상태


1차 캐시

User user1 = em.find(User.class, 1L);
User user2 = em.find(User.class, 1L);

두 번째 조회는 DB에 접근하지 않는다.

DB조회 ⇒ 영속성 컨텍스트 저장 ⇒ 재사용
이를 1차 캐시라고 한다.


Dirty Checking (변경 감지)

@Transactional
public void updateUser(Long id) {
	User user = repository.findById(id).orElseThrow();
    
    user.setName("Kim");
}

save() 없음

하지만 트랜잭션 종료 시

update user
set name = 'Kim'
where id = 1

자동 실행


Flush
영속성 컨텍스트의 변경 내용을 DB에 반영

em.flush();

※ 주의
flush != commit
DB에 SQL만 보내고 트랜잭션은 유지된다.

0개의 댓글