[String Boot] SQL Error: 17059, SQLState: 99999 錯誤解決方式

環境: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;
這件事情告訴我們,就算是自動產生的,也要仔細檢查(尤其是別人的資料庫),可能因為設計習慣的不同,而產生錯誤。

又學到一件事!

留言