問題描述
最近項目有用到Jpa,因爲Jpa這種ORM框架和ibatis這樣的框架不同,使用者不需要自己寫SQL就可以對數據庫完成增刪查改,但是我在進行單元測試的時候發現在調用Jpa.save(Entity e)
方法的時候,爆出的異常是SQL語法和版本不符,這就意味着SQL寫錯了
問題原因
我們都知道,JPA在一般情況下是不需要我們自己寫SQL的,那麼爲什麼會出現SQL語法錯誤呢?
原因就是在數據庫上出了問題。
在debug的過程中我發現,不僅SQL語法寫錯會爆出語法異常,其他情況如數據庫要求非空但是沒有插入字段,表名是SQL關鍵字等等這些都會爆出SQL語法錯誤異常
解決辦法
- 修改數據庫表和字段名稱
- 因爲Jpa默認是把Entity的實體全部插入,我們需要在Entity類中加入
@DynamicInsert
這個註解,表明不是全部插入,這樣我們類的字段如果有空值的話就不會把空值插入數據庫的非空字段中(前提是數據庫的非空字段有默認值)