[JPA] 영속성 관리 - Entity 생명주기
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 프로그래밍(김영한)다정한 피드백 환영해요 🤗
Author And Source
이 문제에 관하여([JPA] 영속성 관리 - Entity 생명주기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@purple/JPA-영속성-관리-Entity-생명주기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)