새소식

Programming/Solving Errors

Failed to load ApplicationContext, Syntax error in SQL statement

 

 

에러 내용

 

java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@6c951ada 
testClass = review.data.repository.UserRepositoryTest, locations = [], ...

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: 
Error creating bean with name 'myBatisUserRepository' defined in file ...

Caused by: org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'userMapper' defined in file ...

Caused by: org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'dataSourceScriptDatabaseInitializer' defined in ...

Caused by: org.springframework.jdbc.datasource.init.ScriptStatementFailedException: 
Failed to execute SQL script statement #2 of file ...

Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: 
Syntax error in SQL statement "create table [*]user ( id bigint generated by default as identity, user_name varchar(10), phone_num varchar(25), primary key (id) )"; 
expected "identifier"; SQL statement: create table user ( id bigint generated by default as identity, user_name varchar(10), phone_num varchar(25), primary key (id) ) [42001-224]

java.lang.IllegalStateException: ApplicationContext failure threshold (1) exceeded: 
skipping repeated attempt to load context for [WebMergedContextConfiguration@6c951ada ...

//(이하 생략)

 

테스트 하나만 실행했을 뿐인데 에러 코드가 진심 길었다. 지금까지 본 에러 중 가장 길었음...

너무나 에러 내용이 많아서 대체 뭐가 문젠가 계속 헤맸다. 😭

 

 

 

발생 상황 및 해결

 

H2 DB와 연동하여 MyBatis 관련 설정 및 CRUD 로직과 쿼리 작성, 테스트까지 실행 완료했으나

테스트를 Embeded Mode로 돌리기 위해 application.properties, schema.sql 등 설정을 추가적으로 하고

테스트를 재실행한 결과 위와 같은 에러가 발생했다.

 

처음엔 Embeded Mode로 실행하기 위해 해야 하는 설정을 빼먹었거나 경로 설정이 잘못됐나 해서 한참을 뒤졌지만 그건 아니었고

길고 긴 오류를 다시 한번 살펴봤는데 Syntax error in SQL statement가 눈에 띄었다.

 

결국 저 미친듯한 에러의 원인은 테이블명으로 사용한 "user"가 H2 데이터베이스의 예약어로 사용되기 때문이었다.

테이블명만 다른 걸로 수정하니 바로 해결이 되었다...

 

이 상황을 겪고 보니 예전에 오라클을 썼을 때도 이런 적이 있었던 게 생각났다. 난 그새 까먹었던 거다ㅠㅠ

아무리 테스트용이라도 DB 테이블명은 예약어와 겹치지 않도록 신경써야겠다.

 

 

 

Contents

Copied URL!

Liked this Posting!