#spring-boot #initialization #h2
Вопрос:
Я пытаюсь создать небольшую настройку загрузки Spring с базой данных h2.
Теперь у меня странная проблема, которую я не могу решить.
если я не создам data.sql
для исходных данных, приложение запустится нормально и создаст мои таблицы сущностей.
Если я создам data.sql
для исходных данных и сохраню существующую таблицу с предыдущего шага, все будет работать нормально. Если я создам data.sql
файл для исходных данных и удалю существующий файл h2, я получу сообщение об ошибке, что он не может импортировать данные, потому что таблица отсутствует.
Как мне сказать Spring, чтобы он создавал мои таблицы перед импортом исходных данных?
Комментарии:
1. Какую версию Spring Boot вы используете и используете ли вы Hibernate в своем приложении?
2. @AndyWilkinson Я использую последнюю версию 2.5.1, и у меня есть зависимость от гибернации, и я использую ее только для
spring.jpa.hibernate.ddl-auto
Ответ №1:
Это описано в примечаниях к выпуску Spring Boot 2.5:
По умолчанию
data.sql
сценарии теперь запускаются до инициализации режима гибернации. Это согласует поведение базовой инициализации на основе сценариев с поведением Flyway и Liquibase. Если вы хотите использоватьdata.sql
для заполнения схемы, созданной Hibernate, установитеspring.jpa.defer-datasource-initialization
значениеtrue
. Хотя смешивать технологии инициализации базы данных не рекомендуется, это также позволит вам использоватьschema.sql
сценарий для построения схемы, созданной в режиме гибернации, до ее заполненияdata.sql
.