티스토리 뷰

인프런 - 김영한 jpa 강의 중

 

EntityManager.persist(entity)는 사실 db에 저장하는게 아니라, entity를 영속성 컨텍스트라는 곳에 저장한다는 것이다.

 

엔티티매니저? 영속성 컨텍스트?

- 영속성 컨텍스트는 논리적인 개념

- 눈에 보이지 않는다.

- 엔티티 매니저를 통해서 영속성 컨텍스트에 접근

 

J2SE 환경

엔티티매니저와 영속성 컨텍스트가 1:1 (엔티티매니저를 생성하면 영속성 컨텍스트가 1:1로 생성된다.)

ex) EntityManager -> 1:1 PersistenceContext (눈에 보이지 않는 공간)

 

 

 

엔티티 조회, 1차캐시

인프런 - 김영한 jpa 강의 중

 

인프런 - 김영한 jpa 강의 중

1. 만약 find를 이용해 조회를 한다면 jpa는 1차 캐시를 먼저 찾는다. @Id값이 키값이 되고 entity는 객체 자체가 된다. db를 먼저 찾는 것이 아니다.

인프런 - 김영한 jpa 강의 중

 

2. 만약 키값이 member2일 경우 1차 캐시에 없으면 db에서 조회를 한다. 그것을 1차 캐시에 저장하고 member2를 반환한다.

3. 참고로 별다른 이점이 없다. 왜냐하면 한번의 요청에서만 1차캐시를 유지하며 요청이 끝나면 1차 캐시는 모두 지워진다. 계속해서 사용하는 것이 아니므로 비즈니스로직이 매우 복잡한 경우에만 도움이 된다. 내용만 알고 있으면 된다.

 

            // 1차캐시에 없으면 db에서 찾고 1차캐시에 넣은 것은 찾는다.
            Member member1 = entityManager.find(Member.class, 101L);
            // 1차에 이미 있으므로 쿼리를 날리지 않는다.
            Member member2 = entityManager.find(Member.class, 101L);

            System.out.println("member1 Id : " + member1.getId());
            System.out.println("member1 name : " + member1.getName());
            System.out.println("member2 Id : " + member2.getId());
            System.out.println("member2 name : " + member2.getName());

            //비교 시에 같은 엔티티로 동일하다.
            System.out.println("result = " + (member1 == member2)); // true

 

 

 

 

'dev > spring JPA 활용 웹만들기' 카테고리의 다른 글

플러시란?  (0) 2024.01.30
쓰기지연 SQL 저장소  (1) 2024.01.30
엔티티의 생명주기  (0) 2024.01.30
JPA 의 EntityManager 이용한 저장,업데이트,삭제,조회  (1) 2024.01.29
jpa 구동방식  (0) 2024.01.29
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/09   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함