2014-01-28 32 views
2

我正在使用基於內存的HSQLDB在本地測試應用程序。 到目前爲止,一切都很順利,但是,當執行一個字符串大於256個字符的測試用例時,我遇到了一個錯誤。Java/Hibernate + HSQLDB java.sql.BatchUpdateException:數據異常:字符串數據,右截截

Caused by: java.sql.BatchUpdateException: data exception: string data, right truncation; table: TABLENAME column: COLNAME 
at org.hsqldb.jdbc.JDBCPreparedStatement.executeBatch(Unknown Source) 
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70) 
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268) 
... 30 more 

我得知這個錯誤的原因通常是一個人使用的數據類型的「溢出」。

困擾我的是我使用hbm.xml文件明確地將列定義爲4000字符大。

<property name="translation" type="java.lang.String" length="4000"> 
    <column name="COLNAME" not-null="false" /> 
    </property> 

當我將測試字符串縮減到256個字符或更少時,所有事情都會重新開始。 257+個字符,並拋出錯誤。我真的不明白爲什麼會發生這種情況。爲什麼HSQLDB將此列定義爲length =「256」,當我明確指出它應該是4000時...

任何人都可以幫忙嗎?

最好的問候, daZza

+0

你如何重新創建數據庫?你是否在hibernate配置中指定SQL方言? – WeMakeSoftware

+0

當然,我用下面的HSQLDB: hibernate.dialect =組織: hibernate.dialect = org.hibernate.dialect.HSQLDialect hibernate.hbm2ddl.auto =爲真正的數據庫中創建 這。 hibernate.dialect.SQLServerDialect hibernate.hbm2ddl.auto = validate 數據庫結構的重新創建完美。所有的表格,欄目,約束條件等都在那裏並且完全正常運作。唯一的問題似乎是長度「256」thingy ... – daZza

+0

你檢查過數據庫中列的定義嗎?另外:添加到你自己的問題應該被編輯進來,而不是作爲評論。 –

回答

1

好,無論出於何種原因HSQLDB似乎在配置文件中指定給它創造了真正的表的某些類型和值做了不好的映射。

我能夠通過將「type」屬性更改爲type = text來解決問題。現在一切正常。我只希望,我完成測試應用程序後,它仍然與原始的MSSQL數據庫一起工作,並將文本映射到varchar然後...

相關問題