영속성 관리 #1
자바 ORM 표준 JPA 프로그래밍 - 기본편 을 듣고 정리하는 글
JPA에서 가장 중요한 2가지
- 객체와 관계형 데이터베이스 매핑하기 - 설계와 관련
- 영속성 컨텍스트 - 실제 JPA가 어떻게 동작하는지?
영속성 컨텍스트
JPA를 이해하는데 가장 중요한 용어 "엔티티를 영구 저장하는 환경"
EntityManager.persist(entity); // Entity를 영속화한다
위 코드는 DB에 저장하는 것이 아닌 영속성 컨텍스트에 영속화하는 것이다.
논리적인 개념으로 엔티티 매니저를 통해 영속성 컨텍스트에 접근한다.
EntityManagerFactory는 하나만 생성해서 application 전체에서 공유
1. 요청이 들어올 때, EntityManagerFactory가 EntityManager를 생성해준다.
2. EntityManager는 내부적으로 DB Connection을 맺는다.
EntityManagerFactory
엔티티 매니저를 생성해주는 Factory
하나만 생성하여 AP 전체에 공유
EntityManager
엔티티와 관련된 모든 일을 처리
쓰레드간 공유하면 절대 안됨!
엔티티의 생명 주기
- 비영속(new/transient) : 영속성 컨텍스트와 전혀 관계 없는 새로운 상태
- 영속(managed) : 영속성 컨텍스트에 관리되는 상태
- 준영속(detached) : 영속성 컨텍스트에 저장되었다가 분리된 상태
- 삭제(removed) : 삭제된 상태
비영속
최초에 생성한, JPA와 관계 없는 상태
// 객체를 생성한 상태(비영속)
Member member = new Member();
member.setId("member1");
member.setUsername("회원1");
영속
객체를 영속성 컨텍스트에 저장한 상태
// 트랜잭션 한 단위마다 만들어져야함, 커넥션 하나 받았음
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.beain() // 트랜잭션 시작
em.persist(member); // 영속성 컨텍스트에 저장!, 아직 쿼리가 실행된 것은 아님
준영속
영속 상태의 엔티티가 영속성 컨텍스트에서 분리된 상태, 영속성 컨텍스트가 제공하는 기능을 사용할 수 없음
em.detach(entity) // 특정 엔티티만 준영속 상태로 전환
em.clear() // 영속성 컨텍스트 전체 완전히 초기화
em.close() // 영속성 컨텍스트를 종료
삭제
엔티티를 영속성 컨텍스트와 DB에서 삭제
em.remove(entity)
Author And Source
이 문제에 관하여(영속성 관리 #1), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@623nana/영속성-관리저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)