[4/26 TIS] 테이블 이름은 User로 짓지 말자.
부트캠프에서 배운 내용을 가지고 복습 차원에서 가벼운 싱글 프로젝트를 시작했다. 문제는 시작하자마자 발생했다.
User 엔티티를 만들고, 컨트롤러에서 Post 요청을 받아 처리하고 만들어진 엔티티를 저장하려고 하는데 시작도 전에 에러 메시지를 먼저 마주했다.
Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "DROP TABLE IF EXISTS USER[*] CASCADE "; expected "identifier"; SQL statement: drop table if exists user CASCADE [42001-206]
Error executing DDL "alter table stamp add constraint FKlw4ukoqk4imloc7y3nspycwrt foreign key (user_id) references user" via JDBC Statement
이게 무슨 소리인가 싶어 구글링해봤더니 역시 삽질 선배님들께서는 이미 겪어보신 일들이었다. 해당 링크들을 아래에 전한다.
StackOverflow : https://stackoverflow.com/questions/70797504/spring-data-jpa-h2-database-is-returning-ddl-error-during-table-creation
Spring Data JPA (H2 database) is returning DDL error during table creation
I have a Spring boot application where I have H2 as database. I have just one entity which is User. When I run the application, I keep getting DDL errors when creating the table in memory. If I try...
stackoverflow.com
CREATE TABLE 예제 따라하다가 'expected "identifier"; SQL statement:' 오류나는 경우 - 인프런 | 질문 & 답변
강의를 따라하다가 아래와 같은 에러가 나며 종료가 되었는데 테이블명 USER 대신 USERS 로 변경하니 정상동작 했습니다. 다른분들 참고하세요. Spring Boot 2.7.0 버전 입니다. java.lang.IllegalStateExcepti
www.inflearn.com
두 글의 골자는 결국 'USER를 테이블 명으로 사용하지 마라!' 였다. 만일 엔티티 이름이 User라면 @Table(name = "임의의 테이블 명") 애너테이션을 사용해서 테이블명을 따로 지정해주던지(Users가 제일 무난해 보인다), 아니면 아예 엔티티 이름 자체를 다르게 하던지. 아무튼 테이블 이름에 User는 사용하면 안된다.
왜 그런지 궁금해서 찾아봤는데 비루한 영어실력과 삽질로 인한 멘탈리티 이슈로 이유를 찾아내지는 못했다(참고로 나는 why h2 database can't use user as table name 이라고 검색했다). 내일 중으로 한 번 정도 더 찾아봐야겠다.