- 객체와 관계형 데이터베이스 매핑하기
- 영속성 컨텍스트 (Persistence Context)
영속성 컨텍스트에 대해 알아보기 전, 영속성 컨텍스트 내부에서 어떤 일이 일어나는지 알아보기 위해 JPA에서의 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 프로그래밍(김영한)다정한 피드백 환영해요 🤗