[JPA] 영속성 관리 - Entity 생명주기

6599 단어 JPAJPA

JPA에서 가장 중요한 두가지 ✌🏻

  • 객체와 관계형 데이터베이스 매핑하기
  • 영속성 컨텍스트 (Persistence Context)

영속성 컨텍스트에 대해 알아보기 전, 영속성 컨텍스트 내부에서 어떤 일이 일어나는지 알아보기 위해 JPA에서의 Entity 생명주기에 대해 먼저 알아보자.

Entity의 생명주기

- 비영속

(new/transient) : 영속성 컨텍스트와 전혀 상관없는 새로운 상태

Member member = new Member();
member.setId(1L);
member.setName("kitty");

// -> jpa에서 전혀 관리되지 않는 상태이다.

- 영속

managed : 영속성 컨텍스트에 관리되는 상태

Member member = new Member();
member.setId(1L);
member.setName("kitty");

EntityManagerFactory emf = Persistence.createEntityManagerFactory("name");
EntityManager em = emf.createEntityManager();
em.getTransaction.begin();

em.persist(member); // 영속성 컨텍스트에 저장

참고로 em.persist(member)에서는 데이터베이스에 바로 저장되는 것이 아니라,
insert SQL이 영속성 컨텍스트에 저장된 상태이다.

- 준영속

detached : 영속성 컨텍스트에서 분리된 상태

Member member = em.find(Member.class, 1L);
member.setName("catty");
em.detach(member);

tx.commit();

// -> commit이 되기 전 memeber는 영속성 컨텍스트에서 분리 되었기 때문에
// update 쿼리갸 실행되지 않는다.

준영속 상태로 만드는 방법

  • em.detach(entity);
  • em.clear();
  • em.close();

- 삭제

remove : 영속성 컨텍스트에서 삭제된 상태

Member memeber = em.find(Member.class, 1L);
em.remove(member); // delete SQL 생성,저장
tx.commit(); // delete SQL 실행

참고

자바 ORM 표준 JPA 프로그래밍 - 기본편
자바 ORM 표준 JPA 프로그래밍(김영한)

다정한 피드백 환영해요 🤗

좋은 웹페이지 즐겨찾기