Error

#Springboot - MySQL : Field 'id' doesn't have a default value

paran21 2022. 4. 19. 15:19

실전 프로젝트 중에 간간히 떴던 에러가 있었다..!!

최종발표회 이후 이 에러때문에 서비스가 정상적으로 작동하지 않았다는 것을 보고 얼마나 놀랐는지....!

 

그래서 그 뒤로 매일 체크해보고 있는데, 오늘 또 같은 에러가 떴다.


java.sql.SQLException: Field 'id' doesn't have a default value
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
... 


구글링에서는 pk인 id 값에서 AI가 mysql에 체크가 되어 있지 않은 경우에 발생한다고 하는데,

@GenerationType.AUTO를 사용하기 때문에 우리 프로젝트 DB에서는 처음부터 AI가 체크되지 않은 상태로 테이블이 생성되기 때문에 해당되지 않는다.

문제를 해결하지 못해서 이전까지는 결국 DB를 새로 만들어서 정말 말그대로 봉합만 했었다..

 

근데 오늘 다시 에러가 떠서 @GenerationType도 바꿔보고 이것저것 시도해보다가, 문득 발견했다.

Room의 pk는 room_id인데 왜 칼럼에 id가 또 있지...?

@Column(name = "roomId")라는 설정 때문에 DB에도 room_id로 생성되었는데, 칼럼 중에 id가 추가되어 있었다.

서버에는 id에 어떤 로직도 구현되어 있지 않으니까 당연히 들어가는 값이 없고, 에러가 뜬 거였다.

 

그래서 DB에서 이 id 칼럼을 지우고 나니 정상적으로 작동하는 것을 확인했다.

 

이번에도 느낀 것이지만, 에러가 떴을 때는 정말 그 에러메시지 자체를 잘 보는게 중요하다!!

이렇게 생각없이 'id고, RoomService와 RoomController에서 에러가 뜬다고 하니 Room의 pk를 보자'라고 생각하면 이렇게 문제 해결을 할 수가 없다..

 

결론:: 에러메시지를 잘보자!!