1. 程式人生 > >Caused by: java.sql.SQLException: 無效的列型別: 16 及oracle 方言選擇問題。

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版本以上。