본문 바로가기

ERROR

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

 

 

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 할 수 있다.