SpringBoot啟動時初始化數據庫及spring.jpa.generate-dll與spring.jpa.hibernate.ddl-auto之間的困惑


參考文章

 Springboot2.x 自動創建表並且執行初始化數據

---------------------------------

1、SpringBoot根據腳本初始化

結構初始化腳本文件由spring.datasource.schema屬性指定,數據初始化腳本由文件spring.datasource.data屬性指定。

這兩個腳本是否執行的開關由spring.datasource.initialization-mode決定:always-一定執行,embedded-只對內存數據庫執行,never-不執行。

2、JPA根據類結構初始化

  @Entity注解的類將會被初始化一張數據庫表。

  是否執行的開關由spring.jpa.hibernate.ddl-auto屬性控制,可為create/update/create-drop/none/validate,其中none和validate為不執行。

3、初始化時對於另一個屬性spring.jpa.generate-dll在理解上的困惑

  可以參考這篇文章---用屬性控制Hibernate生成DDL

  按照它的描述,spring.jpa.generate-dll是jpa層面對數據表生成策略的控制,而spring.jpa.hibernate.ddl-auto是jpa實現hibernate層面上對數據表生成策略的控制。

  實踐也驗證了文章里所說的,spring.jpa.generate-dll比spring.jpa.hibernate.ddl-auto有更強的控制力度,即使spring.jpa.hibernate.ddl-auto為none,只要spring.jpa.generate-dll為true,也會根據@Entity注解的實體類生成對應數據表。

  按照文章的建議,為了避免混淆和不好理解,這兩者最好不要混用,只對JPA實現層面的控制屬性spring.jpa.hibernate.ddl-auto進行設置即可。

4、讓SpringBoot根據腳本和讓JPA根據實體類進行初始化,兩者之中選擇一個即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM