簡體   English   中英

Spring JPA ddl-auto=使用初始數據創建

[英]Spring JPA ddl-auto=create with initial data

我想使用 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等任何數據庫遷移工具。

感謝您的回答。

請注意,基於腳本的初始化,即通過 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM