환경: Spring JPA
상황: JPA를 사용하여 DB에 insert를 하는데, DB column의 default값이 적용되지 않고 null값이 들어가는 경우를 발견하였다.
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 어노테이션을 붙여줘야 한다.