엔티티 조회, 1차 캐시

영속성 컨텍스트는 내부에 1차 캐시라는 것을 들고 있습니다.

//엔티티를 생성한 상태(비영속)
Member member = new Member();
member.setId("member1");
member.setUsername("회원1");

//엔티티를 영속
em.persist(member)

Member 객체를 생성하고 em.persist로 member 객체를 집어넣으면 무슨 일이 발생할까요?

지금은 EntityManager 자체를 영속성 컨텍스트라고 이해해도 됩니다. 물론 약간 미묘한 차이는 있습니다.

이 내부에는 1차 캐시가 있습니다.

사실 1차 캐시를 영속성 컨텍스트라고 이해해도 됩니다.

Untitled

1차 캐시에는 @Id와 Entity가 있습니다.

즉, DB PK로 매핑한 것이 키가 되고 Entity 자체가 값이 됩니다.

지금 같은 경우에는 키가 "member1"이 되고 값이 member 객체 자체가 됩니다.

1차 캐시에서 조회

이렇게 저장하면 조회를 할 때 이점이 있습니다.

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차 캐시를 먼저 뒤집니다.

Untitled