Весенняя загрузка h2 исходные данные, не создающие таблицу сначала

#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 .