Caused by: java.sql.SQLException: 無效的列型別: 16 及oracle 方言選擇問題。
Caused by: java.sql.SQLException: 無效的列型別: 16
oracle,hibernate 儲存資料時提示的錯誤。 is_deleted 預設值為 0 ,沒有主動賦值給他。儲存時報錯。但是另外的類就沒問題。 但是兩者的寫法,一個是註解寫在私有變數上,一個是寫在屬性上面,難道和這個有關係?測試了一下,也不行。後來經過比較發現是沒有下面這兩個屬性,加上即可。。
@DynamicInsert(true)
@DynamicUpdate(true)
但是又有一個新問題。我需要主動更新null值到某個欄位,然後還是會報這個錯誤。
網上查了一下,把
hibernate.dialect 由org.hibernate.dialect.OracleDialect 改為 org.hibernate.dialect.Oracle9iDialect 。居然可以了。。。
參考網站:
http://stackoverflow.com/questions/27154954/boolean-column-type-nullable-true-in-hibernate
具體哪個版本的oracle用哪個方言的,下面的表:
可是到底用OracleDialect還是什麼9i,10g呢。區別查了一下。
網上這麼說的:
網址:http://www.oschina.net/question/135225_21203
8i和9都繼承至Dialect,而9i繼承8i,10i繼承9i的方言,增加些新的特性,分頁程式碼實現不太一樣,不過效率不相上下。
還有需要注意的是,對應的方言和對應的hibernate版本要匹配。
參考:http://stackoverflow.com/questions/4369944/hibernate-dialect-for-oracle-database-11g
Use
the Oracle 10g dialect. Also Hibernate 3.3.2+ is required for recent JDBC drivers (the internal class structure changed - symptoms will be whining about an abstract class).
用10g的方言 需要hibernate3.3.2版本以上。