@DynamicInsert
이 어노테이션을 엔티티에 적용하게 되면 Insert 쿼리를 날릴 때 null 인 값은 제외하고 쿼리문이 만들어진다.
장점 더 적은 작업량 + 빠른 속도
필드차이가 1개밖에 안되서 조금 정도밖에 차이가 안나지만 필드가 많아질수록 더 차이가 많이납니다!
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
// jpa
@Entity
@Table(name = "users")
@DynamicInsert
public class User {
....
}
테스트
@Test
void dynamicInsertTest() {
// given
var newUser = User.builder().username("user").build();
// when
userRepository.save(newUser);
// then
// 부분 생성 쿼리
}

password 는 삽입을 안함.
@DynamicUpdate
이 어노테이션을 엔티티에 적용하게 되면 Update 쿼리를 날릴 때 null인 값은 제외하고 쿼리문이 만들어진다.
적용 방법
@DynamicUpdate
public class User {
테스
@Test
void dynamicUpdateTest() {
// given
var newUser = User.builder().username("user").password("password").build();
userRepository.save(newUser);
// when
newUser.updatePassword("new password");
userRepository.save(newUser);
// then
// 부분 수정 쿼리
}
적용전

적용후

'Spring' 카테고리의 다른 글
| SpringData JPA, Example Probe ExampleMatcher(Query by Example) (0) | 2024.03.06 |
|---|---|
| SpringData JPA야, 나는 엔티티 일부만 필요한데? (Projection) (0) | 2024.03.06 |
| JPQL 및 QueryDSL 활용 (0) | 2024.03.06 |
| SpringData 구조 밑 JPA repositoey 원리 (0) | 2024.03.05 |
| Raw JPA 로 개발하기 (1) | 2024.03.05 |