JPA 구동 방식
![](https://velog.velcdn.com/images/shinjaewon99/post/b001f13b-8cdf-4cc1-872a-1390d64aae08/image.PNG)
- 간단히 말해서 EntityManagerFactory 라는 공장에서 찍어내서 실행한다.
JPA에서 가장 중요한 2가지
- 객체와 관계형 데이터베이스 매핑하기
- 영속성 컨텍스트
JPA 영속성 컨텍스트
- EntityManager.persist (entity); = DB에 저장 X, 영속성 컨텍스트 안에서 entity를 "영속" 하는것
- "엔티티를 영구 저장하는 환경" 이라는 뜻이다
엔티티 매니저 ? 영속성 컨텍스트 ?
- 영속성 컨텍스트는 논리적인 개념
- 눈에 보이지 않는다.
- 엔티티 매니저(em)를 통해서 영속성 컨텍스트에 접근하는것이다.
엔티티 생명주기
- 비영속 : 영속성 컨텍스트와 전혀 상관없는 새로운 상태
- 영속 : 영속성 컨텍스트에 관리되는 상태
- 준영속 : 영속성 컨텍스트에 저장되었다가 분리된 상태
- 삭제 : 삭제된 상태
1.
ex) // 객체만 생성한 상태 (비영속)
Member member = new Member();
member.setId("hello");
member.setUserName("회원1");
2.
ex) // 객체만 생성한 상태 (영속)
Member member = new Member();
member.setId("hello");
member.setUserName("회원1");
EntitiyManager em = emf.createEntityManager();
em.getTransaction().begin();
// 객체를 저장한 상태(영속), DB에 저장 X
em.persist(member);
1차 캐시에서 조회
![](https://velog.velcdn.com/images/shinjaewon99/post/7010b176-f7e0-4ec3-a1b1-5189d5caf238/image.PNG)
- 1차캐시에 Map 캐시가 있다고 생각, Map<"해당 엔티티 클래스", "PK값">: 영속된 엔티티값
- 영속 엔티티의 동일성 보장, 같은 엔티티를 "==" 비교할경우 true
- !! 1. 1차 캐시에 없음 -> 2. DB에서 조회 -> 3. 1차 캐시에 저장 -> 4. 반환
Entity 클래스 기본 생성자
![](https://velog.velcdn.com/images/shinjaewon99/post/55304660-a4a4-4e96-aed7-83ead01c5ed4/image.PNG)
정리
- 정적인 매핑과정, 영속성 컨텍스트(실제 동작하는 메커니즘)
- 영속성 컨텍스트는 눈에 보이지 않는다, 엔티티 메니저를 통해 접근
- 수정 = 변경감지 (더티체킹)