Home > Blockchain >  Spring JPA ddl-auto=create with initial data
Spring JPA ddl-auto=create with initial data

Time:03-21

I want to create my tables using Spring JPA auto table creation after that I want to insert my own data (SQL).

To be able to do this I used these lines in my application.properties

spring.jpa.hibernate.ddl-auto=create

spring.sql.init.data-locations=\
classpath:database/sectors_data.sql,\
classpath:database/users_data.sql
spring.sql.init.mode=always

The problem is that when I use ddl-auto=create and run my application it creates tables but does not insert data. To make it to insert data I should change ddl-auto=create to ddl-auto=update and run my application again.

I want to know is there a way to make it with only one run, create tables and then insert data without using any db migration tools like Flyway.

Thanks for answers.

CodePudding user response:

Please note that script-based initialization i.e. through schema.sql and data.sql and Hibernate initialization together can cause some issues.

Either we disable Hibernate automatic schema creation:

spring.jpa.hibernate.ddl-auto=none

This will ensure that script-based initialization is performed using schema.sql and data.sql directly.

If we still want to have both Hibernate automatic schema generation in conjugation with script-based schema creation and data population, we'll have to use:

spring.jpa.defer-datasource-initialization=true

This will ensure, that after Hibernate schema creation is performed then additionally schema.sql is read for any additional schema changes and data.sql is executed to populate the database.

Also, script-based initialization is performed by default only for embedded databases, to always initialize a database using scripts, we'll have to use:

spring.sql.init.mode=always

refer spring-boot-data-sql-and-schema-sql also refer official Spring documentation Initialize a Database Using Basic SQL Scripts

  • Related