본문 바로가기
이론/ERROR

[Spring - JPA] org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "000" not found; SQL statement

by 6161990 2021. 7. 14.

 

 

Entity 'PERSON'을 발견하지 못한다는 에러 발생

 

간단한 TEST라서 H2로 데이터 베이스를 끌어와서 TEST를 사용하고 있는데

TABLE을 발견하지 못한다는 ERROR가 발생했다. 

 

 

해당 TEST 코드 

 

 

resources/data.sql

분명 person 클래스에 @Entity를 지정해두었는데 계속 table을 못찾았다. 

data.sql을 추가하기 전까지는 분명 잘 돌아갔던 test라 당황했다. 

 

구글링해서 이런저런 dependency와 직접 db연동을 해봤는데 실패였다. 

원인은 다른 곳에 있었다....

 

 

Spring Boot 2.5 Release Notes

 

spring-projects/spring-boot

Spring Boot. Contribute to spring-projects/spring-boot development by creating an account on GitHub.

github.com

 

 

"SQL Script DataSource Initialization
지원 schema.sql 또는 data.sql 에 사용되는 근본적인 method가 Spring Boot 2.5에서 다시 설계되었습니다.
DataSource initialization과 관련된 spring.datasource.* properties가 더 이상 지원되지 않고 R2DBC를 통해 액세스 하는 SQL database를 초기화하는 데 사용될 수 있는 새로운 spring.sql.init.* properties를 제공합니다.

schema 및 data initialization에 별도의 자격 증명이 필요한 경우 org.springframework.jdbc.datasource.init.DataSourceInitializer bean을 정의하세요."

 

 

 

" If you want to use data.sql to populate a schema created by Hibernate,

set spring.jpa.defer-datasource-initialization to true. "

 

기본적으로 data.sql는 Hibernate가 초기화되기 전에 실행된다.
data.sql 을 사용하여 Hibernate에 의해 생성된 schema를 populate 하려면 

spring.jpa.defer-datasource-initialization을 true로 설정해야한다.
database initialization을 섞어 쓰는 것을 권장하지 않지만, 

data.sql을 통해 populated 되기 전에 schema.sql script를 사용하여 

Hibernate 생성 schema를 기반으로 build 할 수 있다.