영속성 컨텍스트는 내부에 1차 캐시라는 것을 들고 있습니다.
//엔티티를 생성한 상태(비영속)
Member member = new Member();
member.setId("member1");
member.setUsername("회원1");
//엔티티를 영속
em.persist(member)
Member 객체를 생성하고 em.persist로 member 객체를 집어넣으면 무슨 일이 발생할까요?
지금은 EntityManager 자체를 영속성 컨텍스트라고 이해해도 됩니다. 물론 약간 미묘한 차이는 있습니다.
이 내부에는 1차 캐시가 있습니다.
사실 1차 캐시를 영속성 컨텍스트라고 이해해도 됩니다.
1차 캐시에는 @Id와 Entity가 있습니다.
즉, DB PK로 매핑한 것이 키가 되고 Entity 자체가 값이 됩니다.
지금 같은 경우에는 키가 "member1"이 되고 값이 member 객체 자체가 됩니다.
이렇게 저장하면 조회를 할 때 이점이 있습니다.
Member member = new Member();
member.setId("member1");
member.setUsername("회원1");
//1차 캐시에 저장됨
em.persist(member);
//1차 캐시에서 조회
Member findMember = em.find(Member.class, "member1");
member 객체를 저장하고 em.find 로 조회를 하면 JPA는 DB를 뒤지는게 아니라 1차 캐시를 먼저 뒤집니다.