springboot中使用jpa下hibernate的ddl-auto方式
使用jpa下hibernate的ddl-auto
今天做一個報表的功能,發(fā)現(xiàn)一個表中的shopProductId都為null,但在程序中判斷用的是shopProductId,而且表中有productId不為null,在查找原因的途中,才得知是有人將productId改為了shopProductId,但是數(shù)據沒有更新過去。
遇到這種情況,我們怎么能查看到某些字段被改變了呢?
由于我們用的框架是springBoot+jap-hibernate,然后在jpa下的hibernate,在application配置文件中,有
ddl-auto的配置
ddl-auto:create每次運行該程序,沒有表格會新建表格,表內有數(shù)據會清空ddl-auto:create-drop每次程序結束的時候會清空表ddl-auto:update每次運行程序,沒有表格會新建表格,表內有數(shù)據不會清空,只會更新ddl-auto:validate運行程序會校驗數(shù)據與數(shù)據庫的字段類型是否相同,不同會報錯
把ddl-auto改為validate時,我們啟動項目時,會提示哪一個字段被更改,這樣我們在發(fā)布上線時,會及時發(fā)現(xiàn),不至于出現(xiàn)錯誤。而正常運行的時候,一般設置為update屬性。
spring.jpa.hibernate.ddl-auto的配置
spring.jpa.hibernate.ddl-auto 可以顯式設置 spring.jpa.hibernate.ddl-auto ,
標準的Hibernate屬性值有 none,validate,update,create,create-drop。
Spring Boot 會根據數(shù)據庫是否是內嵌類型,選擇一個默認值。
具體的關系見下
| 內嵌類型 | 數(shù)據庫名稱 | 默認值 |
|---|---|---|
| 內嵌 | hsqldb, h2, derby | create-drop |
| 非內嵌 | 其他數(shù)據庫 | none |
spring.jpa.hibernate.ddl-auto的四個屬性的含義見下表:
| 屬性值 | 作用 |
|---|---|
| create | 每次加載hibernate時都會刪除上一次的生成的表,然后根據你的model類再重新來生成新表,哪怕兩次沒有任何改變也要這樣執(zhí)行,這就是導致數(shù)據庫表數(shù)據丟失的一個重要原因。 |
| create-drop | 每次加載hibernate時根據model類生成表,但是sessionFactory一關閉,表就自動刪除。 |
| update | 最常用的屬性,第一次加載hibernate時根據model類會自動建立起表的結構(前提是先建立好數(shù)據庫),以后加載hibernate時根據 model類自動更新表結構,即使表結構改變了但表中的行仍然存在不會刪除以前的行。要注意的是當部署到服務器后,表結構是不會被馬上建立起來的,是要等應用第一次運行起來后才會。 |
| validate | 每次加載hibernate時,驗證創(chuàng)建數(shù)據庫表結構,只會和數(shù)據庫中的表進行比較,不會創(chuàng)建新表,但是會插入新值。 |
此外,啟動時處于classpath根目錄下的 import.sql文件會被執(zhí)行(前提是ddl-auto屬性被設置為 create 或create-drop)。這在demos或測試時很有用,但在生產環(huán)境中可能不期望這樣。
這是Hibernate的特性,和Spring沒有一點關系。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Java位集合之BitMap、BitSet和布隆過濾器示例解析
這篇文章主要介紹了Java中位集合的基本概念、實現(xiàn)方法以及應用場景,包括Bit-Map、BitSet和BloomFilter,Bit-Map通過位操作高效地存儲和查詢元素狀態(tài),文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-12-12
關于IDEA的junit單元測試Scanner輸入不可用的問題(多種原因分析)
IDEA在Junit測試中使用了Scanner,但是控制臺一直轉圈,無法輸入,eclipse默認可用,其實解決方法很多,今天小編給大家分享多種問題原因分析及解決方法,感興趣的朋友一起看看吧2021-06-06
Java 前臺加后臺精品圖書管理系統(tǒng)的實現(xiàn)
相信每一個學生學編程的時候,應該都會寫一個小項目——圖書管理系統(tǒng)。為什么這么說呢?我認為一個學校的氛圍很大一部分可以從圖書館的氛圍看出來,而圖書管理系統(tǒng)這個不大不小的項目,接觸的多,也比較熟悉,不會有陌生感,能夠練手,又有些難度,所以我的小項目也來了2021-11-11
如何利用Spring把元素解析成BeanDefinition對象
這篇文章主要介紹了如何利用Spring把元素解析成BeanDefinition對象,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-08-08

