221123 TIL columnDefinition으로 기본값 설정

오늘은 마이페이지에서 자신이 작성한 게시글 또는 댓글을 삭제할 수 있게 삭제 버튼과 자신의 정보를 수정할 수 있는 수정 버튼이 필요했다. 근데 이 버튼들은 자신의 정보를 확인할 때만 이 버튼이 보이도록 설정을 해야 했다. 

방법은 두가지 정도 떠올렸었는데 첫 번째로는 프론트엔드에서 로그인할 때 스토어에 로그인한 유저의 정보를 저장했기 때문에 사용자 페이지에 접속한 사용자의 아이디와 사용자 페이지에 접근해 백엔드에서 받아온 사용자의 정보가 같으면 버튼이 보이도록 하는 방법이 첫 번째로 생각해낸 방법이다.

두 번째 방법은 사용자 페이지에 접근할 때 local storage에 저장되어 있는 access token을 header에 전달해서 백엔드에서 전달받은 access token을 decode해 확인하려는 사용자의 아이디와 같으면 해당 사용자의 상태 값(isMyToken)을 true로 변경해 프론트엔드에서 isMyToken이 true면 버튼이 보이도록 하는 방법이 두 번째 방법이었다.

 

두 번째 방법을 선택했는데 두번째 방법을 하기 위해서는 User Entity에 boolean타입인 isMyToken  필드가 추가로 생성이 되어야 했다.

초기값으로는 false여야 했고 boolean의 기본값은 false이기 때문에 필드에 그냥 생성만 해주었다.

 

그런데 null 값은 value가 되면 안 된다는 에러가 발생했다.

우선 모르고 있었던 것은 boolean의 값의 초기값이 false이기 때문에 필드에 생성해도 false가 테이블에 저장될 줄 알았던 것과 primitive타입인 boolean에는 null값이 들어갈 수가 없다는 것 이 두 가지를 놓쳐서 발생한 문제였다.

 

해결 방법으로 @Column 어노테이션을 사용해서 기본값을 설정해주는 것이다.

 

그래서 아래와 같이 @Column 어노테이션을 사용해 columnDefinition으로 boolean의 기본값을 false로 설정해주면 문제를 해결할 수 있다.

 

참조

https://stackoverflow.com/questions/28207359/how-to-set-default-boolean-value-in-jpa

https://www.baeldung.com/jpa-default-column-values