[Spring JPA] JPA에서 insert하는 경우 DB의 default값이 적용되지 않을 때 (@DynamicInsert)

Titu·2022년 1월 1일
0

Spring

목록 보기
2/5

상황

환경: Spring JPA
상황: JPA를 사용하여 DB에 insert를 하는데, DB column의 default값이 적용되지 않고 null값이 들어가는 경우를 발견하였다.

예시

  • Task DB의 'type' column은 default가 'basic'으로 되어 있는 상황
Task task = Task.builder().name("new task").build();

repository.save(task);

위의 코드를 실행하였을 때 기대값은 task의 type값이 'basic'으로 DB에 저장되어 있는 것이었지만, 실제로는 null값이 들어가있었다.

원인

Insert시 @Entity 객체의 필드를 따로 지정해주지 않으면, 해당 필드의 값은 default값이 적용되는 줄 알았지만, 실제로는 필드에 null값이 들어가게 된다.

결론

따라서, null인 필드값이 insert시 제외되게 하기 위해서는 @Entity 객체에 @DynamicInsert 라는 어노테이션을 붙여줘야 한다.

@Entity
@Table(name="task")
@DynamicInsert
class Task {

}

참고

위와 같은 상황은 update 쿼리를 날릴 경우에도 마찬가지이기 때문에, update시에도 null인 필드값이 제외되게 하기 위해서는 @DymamicUpdate 어노테이션을 붙여줘야 한다.

profile
This is titu

0개의 댓글