23. EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
// 비 영속 상태
User user = new User("wons", "12345", "woniper");
// 영속 상태
// 1차 캐시 저장, Query 생성 및 저장
em.persist(user);
// 준영속 상태
// SQL 저장소 Query DB에 반영
em.getTransaction().commit();
em.close();
28. EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
// 영속 엔티티
User user = em.find(User.class, 1);
// 준영속 상태
em.getTransaction().commit();
em.close();
33. EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
// 영속 상태
// 1차 캐시 저장
User user = em.find(User.class, 1);
// 자동 변경 감지
user.setUserName("updateName");
user.setPassword("1111");
user.setNickName("updateNick");
// 준영속 상태
em.getTransaction().commit();
em.close();
38. EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
// 영속 상태
// 1차 캐시 저장
User user = em.find(User.class, 1);
// 삭제 상태, Query 생성 및 저장
em.remove(user);
// SQL 저장소 Query DB에 반영
em.getTransaction().commit();
em.close();
표준 ORM
ORM == RDB와 객체를 매핑 및 사용 (가장 중요)
표준 interface 제공 -> 구현체
Hibernate를 기준으로 발표
자바 개발자
이해 X
3단계 코드
현업 X
JDBC에 비교 -> Connection, Close, 매핑 불필요
쿼리에 집중
S모전자 Map<> 이야기
자극적
JPA는 쿼리 작성 X
ORM은 테이블과 객체를 매핑이 가장 중요(오해 X)
EntityManager
메소드 간단 설명
update(자동 변경 감지)
Connection, Close, 쿼리 자동 생성
JPA는 CRUD를 편하게 하기 위함 X
엔티티 설명
객체와 테이블을 매핑하기 위한 클래스
생명주기
생김새 -> DTO, VO
애노테이션 설명
자세한 설명 X
4가지 엔티티 상태
new 키워드(비영속) -> 순수 객체
영속성 컨텍스트 간단 설명
저장된 상태 -> 영속 엔티티 (persist)
삭제 상태 -> remove
분리된 상태 -> 준영속 엔티티(detach)
이해 못하면 데이터 손실 위험
대망에 영속성 컨텍스트
집중!!!
모두 설명 X
EntityManagerFactory
persistence 설정 -> META-INF/persistence.xml -> 자세한 설명 X
EntityManager 생성 -> 영속성 컨텍스트 영역 생성
se, spring에서 생성 차이점(간단하게)
이 부분을 이해해야 뒤에 설명이 잘 이해됨
물리적 X, EntityManager로 접근
JDBC로 동기화
SQL 저장소(쓰기 지연 SQL이 가능), DB갔다 오는 횟수를 줄임
1차 캐시 영역
@ID == 식별자
Entity == 최신화 엔티티
Snapshot == 최초 엔티티
CRUD 코드와 그림
트랜잭션을 시작
객체 생성
저장
커밋
1차 캐시 영역을 토대로 쿼리 생성
flush는 Commit되기 전에 항상 호출(뒤에서 설명)
1차 캐시에 있으면 DB조회 X
저장 후 반환
update 메소드 X
자동 변경 감지
commit하기 전 flush
비교(최신화 엔티티, 최초 엔티티)
비교를 통해 update 쿼리 생성 및 저장
실제 물리적 공간인 DB에 저장
1차 캐시 먼저 삭제
쿼리 생성 및 저장
실제 물리적 DB에 저장
트랜잭션 단위안에서 동작
flush는 영속성 컨텍스트를 DB에 동기화
commit은 실제로 DB에 저장
할까 말까 고민
뺄수 없었음
전 내용 이해 물어보기
clear : 모두 제거 -> 변경 사항 적용 안됨
detach : 특정 엔티티 제거
close : EntityManager 종료
username == woniper라고 가정
코드 설명
다시 조회
문제 내기 -> username에 속성값은 무엇일까?
User1 == lee-kyung-won
Entity에 username == woniper
식별자로 조회 후 저장