If at first you don't succeed, try again

[JPA] 영속성 컨텍스트 본문

Java/JPA

[JPA] 영속성 컨텍스트

웅지니어링 2025. 2. 21. 14:16

* 영속성 컨텍스트란?

엔티티를 영구 저장하는 환경이라는 뜻이다. 엔티티 매니저로 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리한다.

em.persist(member);

persist() 메서드는 엔티티 매니저를 사용해서 회원 엔티티를 영속성 컨텍스트에 저장한다.

 

* 엔티티의 생명주기

- 비영속(new / transient) : 영속성 컨텍스트와 전혀 관계가 없는 상태 

- 영속(managed) : 영속성 컨텍스트에 저장된 상태

- 준영속(detached) : 영속성 컨텍스트에 저장되었다가 분리된 상태

- 삭제(removed) : 삭제된 상태

 

* 비영속

// 객체를 생성한 상태(비영속)
Member member = new Member();
member.setId("member1");
member.setUserName("회원1");

엔티티 객체를 생성했지만 순수한 객체 상태이고, 저장하지 않았다. 따라서 현재 상태는 비영속이라고 할 수 있다.

 

* 영속

//객체를 저장한 상태(영속)
em.persist(member);

엔티티 매니저의 persist() 메서드를 사용함으로써 엔티티를 영속성 컨텍스트에 저장했다. 이렇게 영속성 컨텍스트가 관리하는 엔티티를 영속 상태라고 한다. 즉, 영속 상태라는 것은 영속성 컨텍스트에 의해 관리된다는 것이다.

 

* 준영속

//회원 엔티티를 영속성 컨텍스트에서 분리, 준영속 상태
em.detach(member);

특정 엔티티를 준영속 상태로 만들려면 em.detach()를 호출하면 된다. em.close()를 호출해서 영속성 컨텍스트를 닫거나 em.clear()를 호출해서 영속성 컨텍스트를 초기화해도 영속성 컨텍스트가 관리하던 영속 상태의 엔티티는 준영속 상태가 된다.

 

* 삭제

//객체를 삭제한 상태(삭제)
em.remove(member);

em.remove()를 호출하면 엔티티를 영속성 컨텍스트와 데이터베이스에서 삭제한다.

 

* 영속성 컨텍스트의 특징

- 영속성 컨텍스트와 식별자 값 : 영속성 컨텍스트는 식별자 값으로 구분한다. 따라서 영속 상태는 식별자 값이 반드시 있어야 한다. 식별자 값이 없으면 예외가 발생한다.

- 영속성 컨텍스트와 데이터베이스 저장 : JPA는 보통 트랜잭션을 커밋하는 순간 영속성 컨텍스트에 새로 저장된 엔티티를 데이터베이스에 반영하는데, 이것을 플러시라고 한다.

- 영속성 컨텍스트의 장점

  • 1차 캐시
  • 동일성 보장
  • 트랜잭션을 지원하는 쓰기 지연
  • 변경 감지
  • 지연 로딩

 

 

 

'Java > JPA' 카테고리의 다른 글

[JPA] Flush와 Commit의 차이  (0) 2025.03.21
[JPA] Entity Manager  (0) 2025.02.12
[JPA] JPA 기초 및 개념  (0) 2025.02.11