영속성 컨텍스트
이다.엔티티 매니저
를 통해 영속성 컨텍스트
에 접근하게 된다.비영속
(new/transient)영속
(managed)준영속
(detached)삭제
(deleted)// 객체 생성 (비영속)
Member member1 = new Member();
member.setId("member1");
Member member2 = new Member();
member.setId("member2");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin(); // transaction 시작
// 객체 저장 (영속)
em.persist(member1);
em.persist(member2);
// 영속성 컨텍스트에서 분리 (준영속)
em.detach(member1);
// 객체를 삭제한 상태 (삭제)
em.remove(member2);
#1 에서 JPA 의 이점에 대해서 언급했었다. 영속성 컨텍스트
는 아래와 같은 이점을 제공해줄 수 있다.
em.find(member.class, "member2")
find 메서드를 호출하면 JPA 는 영속성 컨텍스트
에 있는 엔티티를 먼저 조회한다.Member a = em.find(member.class, "member")
Member b = em.find(member.class, "member")
System.out.println(a==b) // true
persist()
시 SQL 은 DB에 바로 보내지지 않고 쓰기 지연 SQL 저장소
에 저장되었다가 commit()
이 되는 시점에 flush
되면서 DB 로 전송된다.영속성 컨텍스트
는 1차 캐시 내에서 스냅샷과 엔티티를 비교해 변경이 감지되면 쓰기 지연 SQL 저장소
에 update 쿼리를 저장해뒀다가 commit 되는 시점에 DB에 반영한다영속성 컨텍스트의 변경 내용을 DB 에 반영하는 것을 말한다.
출처