JPA의 영속성 관리
- Coding/JPA
- 2021. 7. 30.
반응형
728x90
반응형
영속성 컨텍스트
JPA에서 영속성 컨텍스트란, 엔터티를 영구 저장하는 환경을 말한다. 영속성 컨텍스트는 우리가 개발하면서 직접 관리할 수 없다. 영속석 컨텍스트는 논리적인 개념이고 눈에 보이지 않는다.
엔터티 매니저를 통해서 영속성 컨텍스트에 접근이 가능하다.
EntityManager.persist(entity);
영속성 컨텍스트 엔티티의 생명주기
1) 비영속
영속성 컨텍스트와 전혀 관계가 없는 새로운 상태
2) 영속
영속성 컨텍스트에 관리되는 상태
3) 준영속
영속성 컨텍스트에 저장되었다가 분리된 상태
4) 삭제
영속성 컨텍스트에서 삭제된 상태
생명주기 관리
비영속 상태
Member member = new Member();
Member.setId(“aa”);
영속 상태
Member member = new Member();
EntityManager em = emf.createEntityManager();
em.getTransaction().begin() ;
em.persist(member); // 영속성 상태를 얻는다.
객체가 영속 상태가 된다고 해서, 해당 시점에 DB 쿼리가 수행되지 않는다. 트랜잭션이 commit() 되는 시점에 쿼리가 수행된다는 점에 유의하자.
준영속 상태
em.detach(member); // 영속성 을 지운다.
삭제 상태 만들기
em.remove(member); // 객체를 삭제한 상태
1차 캐시, 2차 캐시
id "aa" 값에 해당하는 데이터와 다른 "bb"의 데이터를 조회하면 당연히 다른 데이터이므로 캐시로 조회하지 않고 DB 조회를 수행한다.
em.persist(member); // 1차 캐시
em.find(Member.class, “aa”);
em.find(Member.class, “bb”); // 2차 캐시 (1차 캐시에 없으므로 DB조회)
em.find(Member.class, “aa”); // 2차 캐시
동일성 보장
Member findMember1 = em.find(Member.class, “aa”);
Member findMember2 = em.find(Member.class, “aa”);
findMember1 == findMember2 // †rue -> 동일성이 보장된다.
같은 id 로 조회해온 객체는 동일성이 보장된다.
더 많은 내용으로 업데이트된 포스팅 바로가기
https://devfunny.tistory.com/814
반응형
'Coding > JPA' 카테고리의 다른 글
[SpringBoot JPA] 쿼리메소드 WHERE AND/OR 절 (0) | 2021.10.26 |
---|---|
[SpringBoot JPA] 쿼리메소드 SELECT 정리 (0) | 2021.10.26 |
SQL 중심의 개발 vs JPA (0) | 2021.07.30 |
JPA 처음 적용해보기 (with persistence.xml, EntityManagerFactory) (1) | 2021.07.08 |
JPA로 원하는 매개변수로 findBy 메소드 생성하기 (1) | 2021.02.14 |