본문 바로가기
Java/JPA

[SpringBoot_JPA_1] Dirty Checking & Merge

by HJ0216 2023. 5. 28.

이 글은 김영한의 [실전! 스프링 부트와 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 생명 주기

+ 영속성 컨텍스트

: 엔티티를 영구 저장하는 환경, 애플리케이션과 데이터베이스 사이에서 객체를 보관하는 가상의 데이터베이스 같은 역할

 : 엔티티 매니저를 통해 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리
 : 엔티티 매니저를 생성할 때 하나 만들어지며, 엔티티 매니저를 통해서 접근하고 관리할 수 있음

 

 

 

참고 자료

 

[JPA] 변경감지 개념과 @Transactional 위치에 따른 변경감지 사용

데이터 변경 로직에서 JPA 변경감지 기능을 자주 접할 수 있는데요. JPA 변경감지에 대해서 짤막한 정리와 함께 @Transactional과 같이 사용할 때 어떠한 점을 유의해야 되는지에 대해서 정리해보고자

beaniejoy.tistory.com

 

[JPA] 영속성 컨텍스트와 플러시 이해하기

영속성 컨텍스트JPA를 공부할 때 가장 중요한게객체와 관계형 데이터베이스를 매핑하는 것(Object Relational Mapping) 과영속성 컨텍스트를 이해하는 것 이다. 두가지 개념은 꼭 알고 JPA를 활용하자.

ict-nroo.tistory.com

 

 

[JPA] 변경 감지와 병합(merge)

지난번에 진행했던 hello shop 프로젝트에서 상품 수정 시 사용됐던 merge() 라는 친구를 기억하나 혹시~😎? JPA에서 준영속 엔티티를 수정하는 방법에는 2가지가 있는데, 이것이 매우 중요하다고 강

velog.io

 

'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