Flush 1차캐쉬 내부 동작과정
462
작성한 질문수 1
1차 캐시가 다 유지된다고 하셨는데 한 가지 의문이 들어 정확히 알고 싶어 질문 올립니다.
말씀하신 그대로 1차 캐시의 모든 정보가 유지가 되는건지 아니면 아래의 과정이 맞는건지 궁금합니다.
memberA를 영속성 컨텍스트에 저장을 하고 이후 memberB를 em.persist() -> flush를 했을 때 Entity는 변경후 데이터 , 스냅샷이 변경 전 데이터가 들어가고 commit을 하면 하면 스냅샷이 변경 후 데이터로 변경되고 rollback을 하면 다시 Entity가 변경 전 데이터로 돌아가는 것이 아닐까 하는 생각이 들었습니다.
답변 2
1
안녕하세요. soul1902님
영속성 컨텍스트의 데이터의 데이터는 객체와 관계있기 때문에 commit, rollback과 관계없이 유지됩니다.
memberA의 데이터를 memberB로 변경하면 영속성 컨텍스트 안에서는 즉시 변경됩니다.
다만 일반적인 웹 애플리케이션에서는 하나의 트랜잭션 안에서만 영속성 컨텍스트를 유지합니다.
따라서 커밋이나 롤백이 이루어지고 나면 영속성 컨텍스트도 함께 제거되는 방식을 많이 사용합니다.
따라서 일반적인 상황에서는 커밋이나 롤백 이후에는 영속성 컨텍스트가 사라진다고 보셔도 괜찮습니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴이에요.
1차 캐시의 내부 동작과정을 설명드리면, 엔티티를 조회할 경우 1차 캐시를 먼저 확인하고 캐시에 없으면 데이터베이스에서 조회한 후, 1차 캐시에 저장합니다. 이후 이 엔티티를 다시 조회할 경우, 1차 캐시에 해당 엔티티가 있기 때문에 캐시에 저장된 값을 가져오며 데이터베이스를 조회하지 않습니다.
또한, memberA를 영속성 컨텍스트에 저장한 후 memberB를 persist()와 flush()를 한다면, memberA가 1차 캐시에 저장된 상태에서 memberB가 데이터베이스에 저장됩니다. 그리고 commit을 하면 memberB는 데이터베이스와 1차 캐시에 저장되며, 스냅샷이 변경된 후 데이터로 변경됩니다. rollback을 하면 memberB는 데이터베이스에서 삭제되며, 1차 캐시에도 없어집니다. 이때 memberA는 여전히 1차 캐시에 저장되어 있습니다.
더 자세한 내용은 JPA의 영속성 컨텍스트와 관련된 개념을 찾아보시면 도움이 될 것입니다. 감사합니다.
벌크연산에서 member.getAge 호출 시 영속성 컨텍스트에서 데이터를 가져오는건가요?
0
22
2
inheritance startegy 선택시 고려사항
0
22
1
Entity 동등성 비교
0
18
1
실무 조언 관련 질문입니다.
0
46
1
H2데이터베이스 파일 생성
0
56
2
서브쿼리 강의에서 ALL 예시 관련 질문드립니다.
0
52
2
수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?
0
51
1
JPQL 메소드와 락
0
55
1
Delivery @OneToOne
0
60
1
17강 4~5분대 테이블 값 조회가 안됩니다.
0
93
2
UnsupportedOperationException 발생
0
86
3
H2 Database 연결이 안됩니다.
0
92
2
연관관계 매핑 질문드립니다.
0
85
2
h2데이터베이스 실행오류
0
107
2
persistence.xml
0
106
2
양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?
0
80
1
영속성 컨텍스트
0
65
1
JPA 프록시
0
94
1
Native Query와 MyBatis
0
68
1
영속성 컨텍스트는 어떤 메모리에 저장되는건가요?
0
85
1
임베디드 타입 예시 코드 관련 질문
0
114
3
명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요
0
94
3
인텔리제이 패키지 커서 단축키 질문
0
108
2
혹시 현재는 ID 데이터 타입이 String이면 안되나요?
0
143
1





