이 글은 김영한의 [실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발]을 수강하며 정리한 글입니다.
🟦 기본 환경: IDE: IntelliJ, Language: Java
1. Dirty Checking, 변경감지
: Transaction Commit 시, 영속화된 Entity에서 가지고 있던 최초의 정보(Snap Shot)와 바뀐 Entity 정보를 비교해서 변경된 부분을 update해주는 기능
@Transaction 안에서 entity 값을 변경해야 dirty checking, 변경 감지가 일어날 수 있음
: flush → commit → update query → DB
2. Merge, 병합
: 준영속 상태의 엔티티를 영속 상태로 변경할 때 사용
준영속 엔티티의 식별자 값으로 영속 엔티티를 조회(1차 캐시/DB→1차 캐시)
→ 영속 엔티티의 값을 준영속 엔티티의 값으로 모두* 교체
→ 트랜잭션 커밋 시점에 변경 감지 기능을 통해 데이터베이스에 UPDATE SQL 실행
* 모든 값이 변경되므로 입력되지 않은 값은 null로 변경되는 위험 존재
+ Entity 생명 주기
+ 영속성 컨텍스트
: 엔티티를 영구 저장하는 환경, 애플리케이션과 데이터베이스 사이에서 객체를 보관하는 가상의 데이터베이스 같은 역할
: 엔티티 매니저를 통해 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리
: 엔티티 매니저를 생성할 때 하나 만들어지며, 엔티티 매니저를 통해서 접근하고 관리할 수 있음
참고 자료
'Java > JPA' 카테고리의 다른 글
[SpringBoot_JPA_1] @NoArgsConstructor (1) | 2023.05.30 |
---|---|
[SpringBoot_JPA_1] @Transactional (0) | 2023.05.29 |
[SpringBoot_JPA_1] StringUtils.hasText() (0) | 2023.05.27 |
[SpringBoot_JPA_1] create Private Method (0) | 2023.05.27 |
[SpringBoot_JPA_1] Injection (0) | 2023.05.25 |