@Araya

Не обогащаются таблицы при создании Entity?

При обогащении данными таблицу PostgreSQL, посредством файла SQL и режимом
spring.jpa.hibernate.ddl-auto=create-drop
ловлю исключение - PSQLException.

Сущность - Book:
@Data
@Entity
@Table(name = "books", schema = "public")
@NoArgsConstructor
public class Book {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String title;
    private String priceOld;
    private String price;
}

Настройки - application.properties:
spring.datasource.url=jdbc:postgresql://localhost:5432/postgres
spring.datasource.driver-class-name=org.postgresql.Driver
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.hibernate.ddl-auto=create-drop

SQL файл - data.sql:
insert into books (title, price_old, price) values ('about animals', '$17.99', '$5.99');


Исключение - PSQLException:
ERROR: relation "books" does not exist

Очень похоже на то, что сначала выполняется SQL, а потом создается база, отсюда и не находит таблицу.
Если база создана, то и скрипт выполняется корректно.
Случилось после миграции с H2 на PostgreSQL.

Можно ли поменять порядок выполнения (т.е создать таблицу, затем наполнить), либо есть адекватное, альтернативное решение?
  • Вопрос задан
  • 33 просмотра
Решения вопроса 1
azerphoenix
@azerphoenix Куратор тега Spring
Java Software Engineer
Добрый день!
Да, конечно же сперва выполняется sql файл.
Можно реализовать по разному:

1) Попробуйте вынести DDL запросы в sql файл. (schema.sql)
2) Либо наоборот содержимое data.sql инициализируйте при помощи java кода. Например, имплементируйте интерфейс CommandLineRunner
3) Попробуйте использовать либу FlyWay для миграций

spring.jpa.hibernate.ddl-auto=create-drop
Это означает, что все созданные таблицы будут дропнуты и на момент старта в БД нет таблиц, куда ваши инсерты должны быть добавлены.

Полезная информация - https://www.baeldung.com/spring-boot-data-sql-and-...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы