<aside> ❗

JPA에서 가장 중요한 2가지

1. 객체와 관계형 데이터베이스 매핑하기 (ORM)

2. 영속석 컨텍스트 (실제 동작하는 매커니즘)

<aside> ❗

엔티티 매니저 팩토리와 엔티티 매니저

image.png

<aside> ❗

영속성 컨텍스트



J2SE 환경 (이전 실습 환경)

image.png

JSEE, 스프링 프레임워크 같은 컨테이너 환경

image.png

</aside>

<aside> ❗

엔티티의 생명 주기

image.png

</aside>

<aside> ❗

비영속

image.png

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

</aside>

<aside> ❗

영속

image.png

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

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

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

<aside> ❗

준영속

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

삭제

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

</aside>

<aside> ❗

영속성 컨텍스트의 이점

<aside> ❗

엔티티 조회, 1차 캐시

image.png

// 엔티티를 생성한 상태(비영속)
Member member = new Member();
member.setId("member1");
member.setUsername("회원1");

// 엔티티를 영속
em.persist(member);

1차 캐시에서 조회

// 엔티티를 생성한 상태(비영속)
Member member = new Member();
member.setId("member1");
member.setUsername("회원1");

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

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


image.png

image.png

** 큰 이점은 안 된다.

→ 고객의 요청이 들어와서 요청이 끝나면 영속성 컨텍스트도 지워지기 떄문 → 트랜잭션 단위로 보통 만들고, 데이터베이스 트랜잭션이 끝날 때 같이 종료시키기 때문

</aside>

<aside> ❗

</aside>