環境:Spring Boot, Oracle DB O11g
今天本來心情很好,在快速敲鍵盤時
突然發現一個錯誤,錯誤訊息如下:
2021-12-06 17:22:32.431 WARN 37052 --- [nio-8082-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 17059, SQLState: 99999
2021-12-06 17:22:32.431 ERROR 37052 --- [nio-8082-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper : 無法轉換為內部方式
2021-12-06 17:22:32.452 ERROR 37052 --- [nio-8082-exec-1] t.c.p.l.v.e.GlobalExceptionHandler : Catch error: org.springframework.orm.jpa.JpaSystemException: could not execute query; nested exception is org.hibernate.exception.GenericJDBCException: could not execute query
message=could not execute query; nested exception is org.hibernate.exception.GenericJDBCException: could not execute query
先看關鍵訊息:
SQL Error: 17059, SQLState: 99999
它代表的是資料庫屬性和程式碼中的屬性不同
例如 String 寫成 Integer 之類的,但是我的 Entity 是使用 IntelliJ 連接資料庫後「自動產生」(Entity from DB)的,怎麼會錯?
後來仔細比對之後發現(節錄其中一段):
create table TB
(
TYPE CHAR default 'I'
);
被自動判斷為:
@Column(name = "TYPE")
private Boolean type;
改成下面這樣就可以了:
@Column(name = "TYPE")
private String type;
這件事情告訴我們,就算是自動產生的,也要仔細檢查(尤其是別人的資料庫),可能因為設計習慣的不同,而產生錯誤。
又學到一件事!
留言
張貼留言
如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com