JPA

[JPA] 변경감지 (Dirty Checking)

개발 공주 2023. 7. 9. 19:13
728x90

JPA에는 수정과 관련된 메소드가 존재하지 않습니다. 

 

당연히 JPA도 DB 데이터를 수정할 수 있습니다. 다만 수정 메소드가 존재하지 않을 뿐입니다.

 

JPA를 사용하여 데이터를 수정하려면 Entity를 조회하여 조회된 Entity 데이터를 변경만 하면 데이터 베이스에 자동으로 반영이 되도록 하는 기능을 바로 Dirty Checking이라고 합니다.

  • JPA는 영속성 컨텍스트에 Entity를 저장할 때 최초 상태(LoadedState)를 저장합니다.
    • 트랜잭션이 commit되고 em.flush(); 가 호출되면 Entity의 현재 상태와 저장한 최초 상태를 비교합니다.
    • 변경 내용이 있다면 Update SQL을 생성하여 쓰기 지연 저장소에 저장하고 모든 쓰기지연 저장소의 SQL을 DB에 요청합니다.
    • 마지막으로 DB의 트랜잭션이 commit 되면서 반영됩니다.
  • 따라서 변경하고 싶은 데이터가 있다면 먼저 데이터를 조회하고 해당 Entity 객체의 데이터를 변경하면 자동으로 Update SQL이 생성되고 DB에 반영됩니다.
    • 이러한 과정을 변경 감지, Dirty Checking이라 부릅니다.

'JPA' 카테고리의 다른 글

[JPA] Entity의 상태  (0) 2023.07.09
[JPA] 쓰기 지연 저장소  (0) 2023.07.09
[JPA] 1차 캐시  (0) 2023.07.09
[JPA] 트랜잭션  (0) 2023.07.09
[JPA] 영속성 컨텍스트  (0) 2023.07.09