2011-11-23 32 views
3

從1.8.x的升級HSQLDB依賴在pom.xml中以2.0.0+後,我開始收到此錯誤:如何讓hibernate 3.5.6-Final和hsqldb 2.0.0在內存中一起工作?

org.hsqldb.HsqlException: length must be specified in type definition: VARCHAR 

顯然,Hibernate生成不正確根據HSQLDB 2要求CREATE TABLE表達。我應該使用不同版本的Hibernate嗎?哪一個? (但是,我寧願暫時堅持使用3.5.6)。或者也許有一種方法可以在後臺兼容模式下使用HSQLDB 2?

謝謝。

+0

我使用HSQLDB 2的原因是1.8在JOIN ... ON ...表達式中不支持額外的條件。例如。我需要在這樣的關聯上有一個過濾器: @OneToMany(...) @Where(「type ='A'」) Set items; – Vlad

回答

6

我建議你使用Maven上最新的HSQLDB 2.2.6。

您可以覆蓋使用URL的VARCHAR大小的強制如

jdbc:hsqldb:mem:test;sql.enforce_size=false 

對Hibernate的版本,更好的兼容性可以使用HSQLDialect.java的從休眠系列3.6.x的一個較新的版本來實現。或者只是升級到最新版本3.6.8

+0

感謝您的建議。我發現問題是由創建表的SQL腳本而不是Hibernate造成的。我修復了CREATE TABLE語句以指定VARCHAR列的長度 - 並且它工作正常。儘管如此,我決定將Hibernate升級到3.6.8.Final和HSQLDB爲2.2.6,但是,現在我遇到了枚舉問題:值附加了空格,而Hibernate的EnumType在將String值轉換爲枚舉值時失敗。 – Vlad

+0

使用VARCHAR作爲列類型以避免空格填充。 CHAR類型填充到用於定義的長度。 – fredt

+0

是的,這將使它工作...但Hibernate的默認行爲仍然是錯誤的,因爲它無法讀取Hibernate以前保存的值到同一Hibernate生成的列中。這個特殊的問題在這裏討論:http://stackoverflow.com/q/8249523/614135 – Vlad

相關問題