Update 쿼리와 더티체킹

프로젝트

목록 보기
15/39

JPA에는 수정메서드가 없다.

  • JPA를 사용하여 데이터를 수정하려면 Entity를 조회하여 조회된 Entity 데이터를 변경만 하면 데이터 베이스에 자동으로 반영이 되도록 하는 기능을 바로 Dirty Checking이라고 한다.
  • JPA는 영속성 콘텍스트에 Entity를 보관할 때 최초의 상태를 저장하고 있다. 이것을 스냅샷이라고 하며 영속성 컨텍스트가 Flush 되는 시점에 스냅샷과 Entity의 현재 상태를 비교하여 달라진 Entity를 찾는다.
  • 이후 변경된 필드들을 이용하여 SQL 저장소에 Update 쿼리를 생성하여 쌓아 둔다.
  • 모든 작업이 끝나고 트랜잭션을 커밋 commit을 하면 이때 SQL 저장소에 있는 쿼리들을 DB에 전달하여 Update를 진행한다.
  • 만약, 특정 원하는 컬럼만 update를 하고 싶을 경우 Entity단에서 @DynamicUpdate를 걸어줘야 한다.

  • 꼭 명시적으로 Update를 써줘야 하는 경우
    이 때는 @Query 애노테이션과 JPQL을 사용하여 쿼리를 만들어줄 수 있다.
    @Modifying이라는 애노테이션도 추가로 붙여야한다.

출처

profile
백엔드를 공부하고 있습니다.

0개의 댓글