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