欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

springboot中使用jpa下hibernate的ddl-auto方式

 更新時(shí)間:2022年02月25日 09:41:59   作者:小丫頭姍珊  
這篇文章主要介紹了springboot中使用jpa下hibernate的ddl-auto方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

使用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, derbycreate-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)文章

最新評(píng)論