DB에 샘플데이터를 미리 넣고 시작하려고 data.sql을 작성하였다.
insert into catalog(product_id, product_name, stock, unit_price) values ('CATALOG-0001', 'pizza', 100, 15000);
insert into catalog(product_id, product_name, stock, unit_price) values ('CATALOG-0002', 'chicken', 200, 18000);
insert into catalog(product_id, product_name, stock, unit_price) values ('CATALOG-0003', 'noodle', 1000, 8000);
그리고 프로젝트를 재시작하니 다음과 같은 오류가 발생했다.
Error creating bean with name 'dataSourceScriptDatabaseInitializer' ... Table not found
테이블을 찾을 수 없어 insert가 불가능하다고 나온다.
해당 원인은 테이블명이 예약어라 못만들었는데 insert 하려해서 발생하거나, 테이블 생성 전인데 데이터를 insert 하려고 해서이다. 나의 경우는 테이블명이 예약어가 아니었기에 insert 순서보다 테이블을 먼저 생성하게끔 하는 옵션 "defer-datasource-initialization: true" 을 setting 파일에 넣어줬다.
spring:
jpa:
defer-datasource-initialization: true
hibernate:
ddl-auto: create-drop
show-sql: true
generate-ddl: true
datasource:
url: jdbc:h2:mem:testdb
username: sa
password:
driver-class-name: org.h2.Driver
그랬더니 문제를 해결할 수 있었다.