今天在使用基於Hibernate的Spring Data JPA來保存一個實體類,當提交表單時,報如下Exception:
控制台輸出的sql語句為:
我的數據庫表結構為:
閱讀Exception的大意,我知道是sql插入時出錯了,這種情況一般是sql語句寫錯了。可是,我這里是使用的hibernate直接保存對象,sql語句不是我寫的,怎么會出錯呢?排除這個原因。然后,我又注意到了控制台的sql語句:
我發現,這里的插入屬性的順序和我數據庫表的屬性順序不同,推測,是不是這個原因導致出錯的呢?留學英國費用於是着手驗證:我將數據庫表刪除,然后重新創建了以category, desc, imgs, plantname, price, id這個順序的表:
運行,發現仍然出錯,故排除這個原因。
接着,我開始在百度上面搜索該異常,其中一篇博客提到了錯誤的原因。
其中一篇博客中寫道,這個可能是屬性與mysql數據庫關鍵字重合。我馬上查看我的屬性,發現desc屬性很有可能跟mysql關鍵字重合了,於是馬上將實體類和數據庫中的desc屬性修改為descrption屬性。運行,異常消失,保存成功!
這個異常卡了我一下午的時間,感覺Hibernate的異常提示有很大的誤導作用,除此之外,由於自己的疏忽,使用了數據庫的關鍵字才導致了該異常的產生。
記錄下這個異常,防止以后再卡在類似的問題上,同時,也希望能對其他人起一些參照作用,讓大家少浪費些時間。