영속성 컨텍스트는 논리적인 개념이며 EntityManager에 있는 공간이다.
영속성 컨텍스트에 저장된 Entity는 커밋 시점에 SQL로 처리된다.
영속성 컨텍스트 안에 1차 캐시가 있는데, 사실상 영속성 컨텍스트를 1차 캐시라고 불러도 될 것 같다.
총 4단계로 나뉜다.
User user = new User(); // 비영속(관계 없는 상태) user.setId(10); user.setName("joo");
EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); em.persist(user) // 영속(1차 캐시에 저장 및 DB에 저장 요청인 상태)
em.detach(user) // 준영속(1차 캐시에서 삭제)
em.remove(user) // 삭제(DB에 삭제 요청인 상태)
1. Commit이 되기 전까지 DB에 SQL로 보내지 않는다.
2. JPA는 조회할 때 1차 캐시를 먼저 보고 없으면 DB에서 가져와 1차 캐시에 올린다.
3. Commit 시점에 flush가 발생한다