영속성 컨텍스트 : 엔티티 타입과 식별자를 키로 사용하는 객체의 집합
엔티티 매니저 : 커밋 시점에 영속성 컨텍스트에서 관리하고 있던 영속 객체의 변경 내역을 추적하여 데이터베이스에 반영
영속성 컨텍스트 : 엔티티를 영구 저장하는 환경(논리적 개념)
엔티티 매니저는 영속성 컨텍스트다 일단 이해
엔티티 생명주기
비영속 : 객체를 생성한 상태
영속 : 객체 생성 -> 엔티티매니저 persist 집어넣기
영속성 컨텍스트
엔티티 조회, 1차 캐시
트랜잭션을 지원하는 쓰기 지연
1차캐시에 넣고, 쓰기 지연에 SQL문 저장
commit되는 시점에 모아둔 쿼리를 DB에 보냄
엔티티 수정 : 값만 바꾸고 커밋하면 update 쿼리 나감
플러시
영속성 컨텍스트를 플러시 하는 방법
em.persist(memberA);
em.persist(memberB);
em.persist(memberC);
// 중간에 JPQL 실행 : flush를 먼저 보내고 JPQL 실행함
// MyBatis or JDBCTemplete 과 섞어 사용할 땐 flush를 해줘야 결과가 나옴
query = em.createQuery("select m from Member m", Member.class);
List<Member> members = query.getResultList();
플러시
준영속 상태 : 영속 상태의 엔티티가 영속성 컨텍스트에서 분리
지연로딩 LAZY를 사용해서 프록시로 조회