我想使用 Spring JPA 自動表創建來創建我的表,然后我想插入我自己的資料 (SQL)。
為了能夠做到這一點,我在 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
問題是當我使用ddl-auto=create和運行我的應用程式時,它會創建表但不插入資料。為了讓它插入資料,我應該更改ddl-auto=create并ddl-auto=update再次運行我的應用程式。
我想知道有沒有一種方法可以只運行一次,創建表,然后插入資料,而不使用任何資料庫遷移工具,如Flyway.
感謝您的回答。
uj5u.com熱心網友回復:
請注意,基于腳本的初始化,即通過 schema.sql 和 data.sql 和 Hibernate 一起初始化可能會導致一些問題。
我們要么禁用 Hibernate 自動模式創建:
spring.jpa.hibernate.ddl-auto=none
這將確保直接使用 schema.sql 和 data.sql 執行基于腳本的初始化。
如果我們仍然希望 Hibernate 自動模式生成與基于腳本的模式創建和資料填充相結合,我們將不得不使用:
spring.jpa.defer-datasource-initialization=true
這將確保在執行 Hibernate 模式創建之后,額外讀取 schema.sql 以獲取任何其他模式更改,并執行 data.sql 以填充資料庫。
此外,默認情況下僅對嵌入式資料庫執行基于腳本的初始化,要始終使用腳本初始化資料庫,我們必須使用:
spring.sql.init.mode=always
參考spring-boot-data-sql-and-schema-sql 也參考官方 Spring 檔案Initialize a Database Using Basic SQL Scripts
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/445638.html
