springboot data JPA的spring.jpa.hibernate.ddl-auto 的看法思考

查閱Springboot的官方文檔可知

spring.jpa.hibernate.ddl-auto屬於數據庫初始化章節的語句,還有一條十分近似的語句---spring.jpa.generate-ddl spring.jpa.generate-ddl 是布爾值,控制該特性的關閉和開啓,跟實現者不要緊spring

使用Hibernate初始化數據庫

spring.jpa.hibernate.ddl-auto 是一個枚舉語句,有5個屬性。數據庫

  • none
  • validate
  • update
  • create
  • create-drop

若是是內嵌型數據庫的則默認值爲 create-drop(H2,HSQLDB,DERBY這幾個是內嵌數據庫)服務器

若是應用程序運行正常,若是你使用create-drop或只是create,而後嘗試只運行create一次因此生成全部內容,而後將其更改成,update只更新架構,或者validate以便下次它只驗證您的數據庫架構。session


create: 每次加載hibernate時都會刪除上一次的生成的表,而後根據你的model類再從新來生成新表,哪怕兩次沒有任何改變也要這樣執行,這就是致使數據庫表數據丟失的一個重要緣由。架構

create-drop : 每次加載hibernate時根據model類生成表,可是sessionFactory一關閉,表就自動刪除。hibernate

update: 最經常使用的屬性,第一次加載hibernate時根據model類會自動創建起表的結構(前提是先創建好數據庫),之後加載hibernate時根據 model類自動更新表結構,即便表結構改變了但表中的行仍然存在不會刪除之前的行。要注意的是當部署到服務器後,表結構是不會被立刻創建起來的,是要等 應用第一次運行起來後纔會。設計

validate : 每次加載hibernate時,驗證建立數據庫表結構,只會和數據庫中的表進行比較,不會建立新表,可是會插入新值對象


生產環境

  • 從理論上講,若是hbm2ddl update在開發中有效,它也應該在生產中工做。但實際上,並不是老是如此。在生產環境中,基本不推薦使用spring.jpa.hibernate.ddl-auto,或者使用none這個屬性,

stackoverflow上的討論開發

有人支持在生產環境使用,有人不支持。不支持的佔了大多數。不支持的人的觀點均爲 「把任務交給DBA」,可是若是一個團隊承擔不起DBA,可使用hbm2ddl.auto,但代價就是--->1.使用向後兼容性方法設計對象模型,即棄用對象和屬性,而不是刪除/更改它們。這意味着若是您須要更改對象或屬性的名稱,請保留原有的名稱,添加新的名稱並編寫某種遷移腳本。若是您須要更改對象之間的關聯,若是您已經在生產中,這意味着您的設計首先是錯誤的,所以請嘗試考慮一種表達新關係的新方式,而不會影響舊數據。 2.始終在部署以前備份數據庫文檔

相關文章
相關標籤/搜索