[Spring - 오류] 예약어 이름으로 테이블을 생성하면 일어나는 일

2023. 12. 31. 23:48Spring

 

나에게서 나타난 오류 메세지들

 

GenerationTarget encountered exception accepting command : Error executing DDL

Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "USERS" not found; SQL statement:

    alter table if exists product_registration 
       add constraint FK6e8dj5flvq0cxn9dirrdko4my 
       foreign key (user_id) 
       references  [42102-224]
       
org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "
    alter table if exists product_registration 
       add constraint FKe5mm9gb9coi9lm02l108h34er 
       foreign key (user_id)

 

해당 메세지들의 키워드를 보면 DDL 에러, USERS 테이블을 생성 오류, user_id 를 찾을 수 없다. 이런 메세지들을 확인 할 수 있다.

이유는 예약어가 테이블 이름에 포함되어있어 해당 테이블과 연관된 Users 테이블이 생성되지 못해 해당 테이블과 매핑된 다른 테이블도 생성하지 못하는 오류가 발생한 것이다.

 

오류 확인 수행 단계

  1. 여기서 처음 내가 생각한 것은 fk 를 인식하지 못하니 내가 테이블 컬럼 혹은 매핑에 오타를 냈는지 확인.
  2. 테이블 이름을 확인했다. 이 중 테이블 예약어 문제 확인.
오류 원인

 

해당 오류는 데이터베이스에서 사용하는 예약어를 클래스 이름으로 사용했다. 처음에는 User -> Users로 지키고 다른 부분은 걸리는게 없다 생각해 넘어갔는데 Users의 enum 으로 할당된 클래스에 Authorization 을 사용해 버렸다. 처음에는 이게 기본적으로 사용되는 예약어라고 생각도 못하고 있어서 엄한 Users 테이블에서 찾게 되었다.

 

오류 해결 방법

 

1. 데이터베이스 예약어 문서 확인

https://dev.mysql.com/doc/refman/8.0/en/keywords.html

 

MySQL :: MySQL 8.0 Reference Manual :: 9.3 Keywords and Reserved Words

9.3 Keywords and Reserved Words Keywords are words that have significance in SQL. Certain keywords, such as SELECT, DELETE, or BIGINT, are reserved and require special treatment for use as identifiers such as table and column names. This may also be true

dev.mysql.com

 

2. 테이블 이름 변경

나는 Authorization -> Role로 이름을 변경해줘서 해결해주었다.