解決Spring Data Jpa 實(shí)體類自動(dòng)創(chuàng)建數(shù)據(jù)庫表失敗問題
Spring Data Jpa 實(shí)體類自動(dòng)創(chuàng)建數(shù)據(jù)庫表失敗
先說一下我遇到的這個(gè)問題,首先我是通過maven創(chuàng)建了一個(gè)spring boot的工程,引入了Spring data jpa,結(jié)果實(shí)體類創(chuàng)建好之后,運(yùn)行工程卻沒有在數(shù)據(jù)庫中自動(dòng)創(chuàng)建數(shù)據(jù)表。
找了半天發(fā)現(xiàn)是一個(gè)配置的問題
hibernate.ddl-auto節(jié)點(diǎn)的配置,這個(gè)配置有兩種方式去配置,我使用的是通過properties文件去配置:
#DataSource Config spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:6033/data_service?characterEncoding=utf8 spring.datasource.username=root spring.datasource.password=root spring.jpa.show-sql= true spring.jpa.hibernate.ddl-auto=update spring.jpa.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect spring.jackson.serialization.indent_output=false
hibernate.hbm2ddl.auto節(jié)點(diǎn)的值有幾個(gè)create、create-drop、update、validate、none
create
:每次加載hibernate會(huì)自動(dòng)創(chuàng)建表,以后啟動(dòng)會(huì)覆蓋之前的表,所以這個(gè)值基本不用,嚴(yán)重會(huì)導(dǎo)致的數(shù)據(jù)的丟失。create-drop
: 每次加載hibernate時(shí)根據(jù)model類生成表,但是sessionFactory一關(guān)閉,表就自動(dòng)刪除,下一次啟動(dòng)會(huì)重新創(chuàng)建。update
:加載hibernate時(shí)根據(jù)實(shí)體類model創(chuàng)建數(shù)據(jù)庫表,這是表名的依據(jù)是@Entity注解的值或者@Table注解的值,sessionFactory關(guān)閉表不會(huì)刪除,且下一次啟動(dòng)會(huì)根據(jù)實(shí)體model更新結(jié)構(gòu)或者有新的實(shí)體類會(huì)創(chuàng)建新的表。validate
:?jiǎn)?dòng)時(shí)驗(yàn)證表的結(jié)構(gòu),不會(huì)創(chuàng)建表none
:?jiǎn)?dòng)時(shí)不做任何操作
可能導(dǎo)致JPA 無法自動(dòng)建表的問題匯總
開發(fā)某個(gè)個(gè)人項(xiàng)目時(shí)使用JPA自動(dòng)建表功能,運(yùn)行項(xiàng)目后無法自動(dòng)建表,也沒報(bào)錯(cuò),網(wǎng)上的各種方法都試了,折騰了一晚上也沒發(fā)現(xiàn)問題。今早才發(fā)現(xiàn)了是自己的一個(gè)sb錯(cuò)誤。索性歸納一下可能導(dǎo)致JPA 無法自動(dòng)建表的問題(mysql)。
1、沒加@Entity或引錯(cuò)Entity所在包
目標(biāo)實(shí)體類前需加@Entity注解
所需Entity位于javax.persistence包下
2、jpa配置中ddl-auto未設(shè)置update
若ddl-auto為none,則程序無法對(duì)db進(jìn)行修改,需設(shè)置update或create。
若設(shè)update,則程序會(huì)對(duì)db中已有表進(jìn)行修改或未有表的創(chuàng)建;若設(shè)create,則會(huì)對(duì)db中的表進(jìn)行drop-create操作,慎設(shè)
注意yml中不要寫錯(cuò)層級(jí),jpa直接位于spring下
3、實(shí)體類的包不是啟動(dòng)程序所在包的子包
項(xiàng)目啟動(dòng)時(shí),框架會(huì)自動(dòng)掃描啟動(dòng)類所在包的所有子包。因此,實(shí)體類包應(yīng)為啟動(dòng)類所在包的子包,如:
否則,需在啟動(dòng)類前加EntityScan注解,標(biāo)明需掃描的實(shí)體包
4、mysql配置問題
mysql6以上需導(dǎo)入com.mysql.cj.jdbc.Driver驅(qū)動(dòng),url后需補(bǔ)充一些參數(shù)
5、依賴不全
需引入:
等依賴
6、實(shí)體類間關(guān)系錯(cuò)誤
實(shí)體間對(duì)應(yīng)關(guān)系弄錯(cuò),或mapby的屬性與對(duì)應(yīng)實(shí)體屬性名不一致(本人就是這個(gè)問題),都會(huì)導(dǎo)致不建表,且項(xiàng)目啟動(dòng)時(shí)不報(bào)錯(cuò),運(yùn)行時(shí)可能報(bào)錯(cuò)
7、啟動(dòng)類注解問題
8、其他問題
重啟mysql
實(shí)體類的某些屬性名與mysql關(guān)鍵字相同
等等~
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java中雙冒號(hào)運(yùn)算符(::)的用法詳解
在Java 8引入的Lambda表達(dá)式和函數(shù)式接口之后,雙冒號(hào)運(yùn)算符(::)成為了一項(xiàng)重要的功能,下面我們就來學(xué)習(xí)一下Java中的雙冒號(hào)運(yùn)算符及其常見應(yīng)用場(chǎng)景吧2023-12-12MyBatis-Plus實(shí)現(xiàn)邏輯刪除的示例代碼
本文主要介紹了MyBatis-Plus實(shí)現(xiàn)邏輯刪除的示例代碼,就是通過邏輯判斷的手段表示該條數(shù)據(jù)已刪除,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05Java實(shí)現(xiàn)圖片轉(zhuǎn)base64完整代碼示例
這篇文章主要給大家介紹了關(guān)于Java實(shí)現(xiàn)圖片轉(zhuǎn)base64的相關(guān)資料,Base64是網(wǎng)絡(luò)上最常見的用于傳輸8Bit字節(jié)碼的編碼方式之一,Base64就是一種基于64個(gè)可打印字符來表示二進(jìn)制數(shù)據(jù)的方法,需要的朋友可以參考下2023-12-12使用java + OpenCV破解頂象面積驗(yàn)證碼的示例
這篇文章主要介紹了使用java + OpenCV破解頂象面積驗(yàn)證碼的示例,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02springboot配置項(xiàng)目啟動(dòng)后自動(dòng)打開瀏覽器訪問項(xiàng)目方式
這篇文章主要介紹了springboot配置項(xiàng)目啟動(dòng)后自動(dòng)打開瀏覽器訪問項(xiàng)目方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01MyBatis自定義映射resultMap的實(shí)現(xiàn)
本文主要介紹了MyBatis自定義映射resultMap的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03Spring Boot Hazelcast Caching 使用和配置詳解
這篇文章主要介紹了Spring Boot Hazelcast Caching 使用和配置詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-09-09教你用MAT工具分析Java堆內(nèi)存泄漏問題的解決方法
今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識(shí),文章圍繞著如何使用MAT工具分析Java堆內(nèi)存泄漏問題的解決方法展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-06-06