티스토리 뷰
반응형
- 영속성 컨텍스트?
- JPA
- 객체 - ORM - DB
- 객체 - 영속성 컨텍스트 매니져 (entity context manager) - DB
- 영속성 컨텍스트 매니져
- 객체 ↔ DB 의 소통을 효율적으로 관리
- PK (Primary Key)
- 테이블에서 각 row 마다 가져야 하는 유일무이한 값 (중복,Null 허용되지 않음)
- 샘플
- JPA
- 자연키 vs 인조키
- 자연키: USERNAME, EMAIL
- 인조키: ID
- 보통 테이블 ID 를 PK 로 설정 (인조키)
JPA 영속성 컨텍스트 1차 캐시 이해
- Entity 저장 시
- Entity 조회 시
- 1차 캐시에 조회하는 Id 가 존재하는 경우
- 1차 캐시에 조회하는 Id 가 존재하지 않은 경우
'1차 캐시' 사용의 장점
- DB 조회 횟수를 줄임
- **'1차 캐시'**를 사용해 DB row 1개 당 객체 1개가 사용되는 것을 보장 (객체 동일성 보장)
- 비교) '1차 캐시'가 작동하지 않을 때
- 만약 DB 에서는 'user1' 회원 1명, 자바 객체로는 'user1' 회원 3명이라면??
- 그리고, 각 객체 회원별로 수정한다면.. 어떤 'user1' 이 맞는걸까??
- 비교) '1차 캐시'가 작동하지 않을 때
Entity 삭제
Entity 업데이트 실패
- Entity 객체를 수정해도 DB 에는 update 가 되지 않음
- 1차 캐시 Entity 객체에만 업데이트 반영됨
- User DB 에는 반영되지 않음
- 객체와 DB 값 불일치 확인(java 안의 1차 캐시의 값은 병경 되었으나 DB값은 변경되지 않았다.)
-
- Entity 업데이트 방법 (1)
- userRepository.save() 사용
-
- Entity 업데이트 방법 (2)
- @Transactional 을 추가
- 굳이 userRepository.save() 함수를 호출하지 않아도, 함수가 끝나는 시점에 변경된 부분을 알아서 업데이트 해 줌 (이를 "Dirty check" 라고 함)
- 간단히 함수가 종료되는 시점에 각 Entity 에 save() 가 호출된다라고 이해
반응형
'개발일지 > TIL' 카테고리의 다른 글
JPA 연관관계, Spring Dada JPA (0) | 2022.07.18 |
---|---|
DB의 연관관계 이해 (0) | 2022.07.18 |
JPA 이해 (0) | 2022.07.18 |
JPA (0) | 2022.07.17 |
Getter, Setter의 이해 (0) | 2022.07.17 |
댓글