[JPA] 영속성 관리

이지현·2023년 9월 18일
0

JPA

목록 보기
2/2
post-thumbnail
번호목차
1.JPA에서 가장 중요한 2가지
2.JPA 구동 방식
3.JPQL

1. JPA에서 가장 중요한 2가지

  • ORM(Object Relational Mapping) : 객체와 관계형데이터베이스 매핑하기
  • 영속성 컨텍스트 : 엔티티를 영구 저장하는 환경, 엔티티 매니저를 통해 영속성 컨텍스트에 접근
EntityManager.persist(entity);

참고

  • J2SE 환경 : 엔티티 매니저와 영속성 컨텍스트가 1:1
  • J2EE(스프링 프레임워크와 같은 컨테이너 환경) : 엔티티 매니저와 영속성 컨텍스트가 N:1

2. 엔티티의 생명주기

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

Member member = new Member();
member.setId(1L);
member.setUsername("회원1");

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

// 객체를 생성한 상태(비영속)
Member member = new Member();
member.setId(1L);
member.setName("회원1");

EntityManager em = emf.createEntityManager();
em.getTransaction().begin();

// 객체를 저장한 상태(영속)
em.persist(member);

(3) 준영속(detatched) : 영속성 컨텍스트에 저장되었다가 분리된 상태

// 회원 엔티티를 영속성 컨텍스트에서 분리(준영속)
em.detach(member);

(4) 삭제(removed) : 삭제된 상태

// 객체를 상태한 삭제(삭제)
em.remove(member);

3. 영속성 컨텍스트의 이점

(1) 1차 캐시

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

// 1차 캐시에 저장됨
em.persist(member);

// 1차 캐시에서 조회
Member findMember = em.find(Member.class, "member1");

(2) 동일성(identity) 보장

(3) 트랜잭션을 지원하는 쓰기 지연(transactional write-behind)

(4) 변경 감지(Dirty Checking)

(5) 지연 로딩(Lazy Loading)

profile
2022.08 ~ 2023.09 / 현재 티스토리 이전 : https://jihyun-devstory.tistory.com/

0개의 댓글