Posts HIWORK: Column 'regiDate' cannot be null
Post
Cancel

HIWORK: Column 'regiDate' cannot be null

문제

/board/add 요청 시 다음과 같은 예외가 발생한다.

1
java.sql.SQLException: Column 'regiDate' cannot be null

board/add 시 등록일 프로퍼티가 null이어도 시스템 시간이 자동 등록되도록 만들어줘야 한다.

시도 방법

DB 자체에 regiDate 기본값 표현식 now()가 설정되어 있지 않아 발생하는 문제로 알았다. 따라서 게시글 테이블뿐만 아니라 사원, 대화, 휴가신청, 댓글 테이블의 생성일자 컬럼에 기본값 표현식 now()를 추가하였다. 그러나 그럼에도 불구하고 같은 에러가 발생했다.

문제 원인

참고 사이트: https://stackoverflow.com/questions/61429609/in-springboot-what-is-the-correct-way-in-annotating-fields-with-default-value 만약 프로퍼티 값이 null일 시 아무런 애노테이션도 적어두지 않으면 하이버네이트는 다음과 같은 insert 쿼리를 생성한다.

1
insert into bList(..., regidate, ...) values (..., null, ...);

이 쿼리는 not null인 필드에 null 값을 집어넣으려 하고 있으니 다음과 같은 예외가 발생하는 것이다.

1
java.sql.SQLException: Column 'regiDate' cannot be null

해결 방법

해결 방법에는 크게 두 가지가 있다.

null 대신 현재 시간을 등록하는 쿼리를 생성하도록 설정

@CreationTimestap 애노테이션을 사용하여 쿼리에 현재 시간을 등록하도록 만든다.

1
2
3
 @Column(name="regidate")
@CreationTimestamp
private Date registrationDate;

생성되는 쿼리에서 해당 프로퍼티 제외하도록 설정

insertable = false 속성을 사용하여 하이버네이트가 생성하는 insert 스크립트에서 해당 필드를 제외하도록 만든다. 그러면 자동으로 데이터베이스 기본값이 사용될 것이다.

1
2
 @Column(name="regidate", insertable = false)
 private Date registrationDate;

이미 DB에 now() 기본값이 설정되어 있으니 두번째 방법을 사용하였다.

This post is licensed under CC BY 4.0 by the author.

모던 자바스크립트 #5.6. iterator

모던 자바스크립트 #5.7. 맵과 셋

Loading comments from Disqus ...