springboot中使用jpa下hibernate的ddl-auto方式
使用jpa下hibernate的ddl-auto
今天做一個報表的功能,發(fā)現(xiàn)一個表中的shopProductId都為null,但在程序中判斷用的是shopProductId,而且表中有productId不為null,在查找原因的途中,才得知是有人將productId改為了shopProductId,但是數(shù)據(jù)沒有更新過去。
遇到這種情況,我們怎么能查看到某些字段被改變了呢?
由于我們用的框架是springBoot+jap-hibernate,然后在jpa下的hibernate,在application配置文件中,有
ddl-auto的配置
ddl-auto:create每次運行該程序,沒有表格會新建表格,表內(nèi)有數(shù)據(jù)會清空ddl-auto:create-drop每次程序結(jié)束的時候會清空表ddl-auto:update每次運行程序,沒有表格會新建表格,表內(nèi)有數(shù)據(jù)不會清空,只會更新ddl-auto:validate運行程序會校驗數(shù)據(jù)與數(shù)據(jù)庫的字段類型是否相同,不同會報錯
把ddl-auto改為validate時,我們啟動項目時,會提示哪一個字段被更改,這樣我們在發(fā)布上線時,會及時發(fā)現(xiàn),不至于出現(xiàn)錯誤。而正常運行的時候,一般設(shè)置為update屬性。
spring.jpa.hibernate.ddl-auto的配置
spring.jpa.hibernate.ddl-auto 可以顯式設(shè)置 spring.jpa.hibernate.ddl-auto ,
標準的Hibernate屬性值有 none,validate,update,create,create-drop。
Spring Boot 會根據(jù)數(shù)據(jù)庫是否是內(nèi)嵌類型,選擇一個默認值。
具體的關(guān)系見下
| 內(nèi)嵌類型 | 數(shù)據(jù)庫名稱 | 默認值 |
|---|---|---|
| 內(nèi)嵌 | hsqldb, h2, derby | create-drop |
| 非內(nèi)嵌 | 其他數(shù)據(jù)庫 | none |
spring.jpa.hibernate.ddl-auto的四個屬性的含義見下表:
| 屬性值 | 作用 |
|---|---|
| create | 每次加載hibernate時都會刪除上一次的生成的表,然后根據(jù)你的model類再重新來生成新表,哪怕兩次沒有任何改變也要這樣執(zhí)行,這就是導致數(shù)據(jù)庫表數(shù)據(jù)丟失的一個重要原因。 |
| create-drop | 每次加載hibernate時根據(jù)model類生成表,但是sessionFactory一關(guān)閉,表就自動刪除。 |
| update | 最常用的屬性,第一次加載hibernate時根據(jù)model類會自動建立起表的結(jié)構(gòu)(前提是先建立好數(shù)據(jù)庫),以后加載hibernate時根據(jù) model類自動更新表結(jié)構(gòu),即使表結(jié)構(gòu)改變了但表中的行仍然存在不會刪除以前的行。要注意的是當部署到服務器后,表結(jié)構(gòu)是不會被馬上建立起來的,是要等應用第一次運行起來后才會。 |
| validate | 每次加載hibernate時,驗證創(chuàng)建數(shù)據(jù)庫表結(jié)構(gòu),只會和數(shù)據(jù)庫中的表進行比較,不會創(chuàng)建新表,但是會插入新值。 |
此外,啟動時處于classpath根目錄下的 import.sql文件會被執(zhí)行(前提是ddl-auto屬性被設(shè)置為 create 或create-drop)。這在demos或測試時很有用,但在生產(chǎn)環(huán)境中可能不期望這樣。
這是Hibernate的特性,和Spring沒有一點關(guān)系。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Mybatis查詢返回Map<String,Object>類型實例詳解
這篇文章主要給大家介紹了關(guān)于Mybatis查詢返回Map<String,Object>類型的相關(guān)資料,平時沒太注意怎么用,今天又遇到了總結(jié)記錄一下,方便以后處理此類問題,需要的朋友可以參考下2022-07-07
SpringBoot響應Json數(shù)據(jù)亂碼通過配置的解決
這篇文章主要介紹了SpringBoot響應Json數(shù)據(jù)亂碼通過配置的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11
IDEA使用JDBC安裝配置jar包連接MySQL數(shù)據(jù)庫
這篇文章介紹了IDEA使用JDBC安裝配置jar包連接MySQL數(shù)據(jù)庫的方法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-01-01
springboot快速整合Mybatis組件的方法(推薦)
Spring Boot是由Pivotal團隊提供的全新框架,其設(shè)計目的是用來簡化新Spring應用的初始搭建以及開發(fā)過程。這篇文章主要介紹了springboot快速整合Mybatis組件的方法,需要的朋友可以參考下2019-11-11
詳解ConcurrentHashMap如何保證線程安全及底層實現(xiàn)原理
這篇文章主要為大家介紹了ConcurrentHashMap如何保證線程安全及底層實現(xiàn)原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-05-05
java實現(xiàn)fibonacci數(shù)列學習示例分享(斐波那契數(shù)列)
這篇文章主要介紹了fibonacci數(shù)列(斐波那契數(shù)列)示例,大家參考使用吧2014-01-01
解析rainbond以應用為中心的架構(gòu)設(shè)計原理
這篇文章主要為大家介紹了rainbond以應用為中心的架構(gòu)設(shè)計實現(xiàn)及原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-02-02

