mysql 테이블 초기값이 null로 들어가는 건에 대하여...

213kky·2024년 1월 18일

문제


프로젝트를 진행하는 도중 views나 softdelete에 필요한 is_deleted 등의 테이블에 초기값으로 0이 아닌 null이 세팅되고 있는 문제를 확인했다.

mysql에 기본값으로 '0'을 세팅하였지만 그럼에도 계속 null이 초기값으로 들어가고 있었다. (코드에서 따로 값을 입력하지 않아서 당연히 데이터베이스 기본값 세팅에 맞게 들어갈 것이라 생각하였다.)

이유를 몰라서 헤매다가 콘솔창을 봤는데 jpa에서 만들어지는 .save() 는 모든필드를 저장한다는 것이 생각났고 쿼리문을 보니

위 사진과 같이 모든 필드에 대해 값을 입력하며 entity에서 is_deleted와 views가 각각 Boolean과 Integer를 사용하기 때문에 jpa의 save메소드에서 해당 값들을 설정하지 않으면 null을 입력해 준다는 것을 알게 되었다.


해결


해결 방법으로는 두가지를 찾았는데

  1. boolean과 int타입으로 바꾸면 null이 아닌 0이 입력될 것이다.
  2. @DynamicInsert를 이용하면 데이터를 저장할 때 값을 설정하지 않은 필드에 대해 insert 쿼리에서 제외되고 데이터베이스에 설정된 default값으로 들어가게 하는 방법이 있다.

나는 2번 방법을 사용하여 해결하였다.

profile
since 2022

0개의 댓글