@DynamicInsert, @DynamicUpdate는 왜 사용할까?

yesrin·2023년 8월 21일

JPA

목록 보기
4/7

@DynamicInsert

이 어노테이션을 엔티티에 적용하게 되면 Insert 쿼리를 날릴 때 null 인 값은 제외하고 쿼리문이 만들어진다.

적용예시

@DynamicInsert
	public class User {
}

테스트코드

@Test
  void dynamicInsertTest() {
    // given
    var newUser = User.builder().username("user").build();

    // when
    userRepository.save(newUser);

    // then
    // 부분 생성 쿼리
  }

적용전

Hibernate: 
    insert 
    into
        users
        (password, username, id) 
    values
        (?, ?, ?)  // 141ms 소요

적용후

Hibernate: 
    insert 
    into
        users
        (username, id) 
    values
        (?, ?)  // 133ms 소요

@DynamicUpdate

이 어노테이션을 엔티티에 적용하게 되면 Update 쿼리를 날릴 때 null인 값은 제외하고 쿼리문이 만들어진다.

적용예시

@DynamicUpdate
public class User {
}

업데이트도 insert와 비슷한 10초 정도 차이의 결과가 나온다.

사용하는 이유
10ms 정도밖에 차이가 안나지만 필드가 많아질수록 더 차이가 많이난다.

profile
안녕하세요! 틀린 정보는 댓글 달아 주세요.

0개의 댓글