【发布时间】:2014-02-20 01:06:31
【问题描述】:
我正在使用基于内存的 HSQLDB 在本地测试应用程序。 到目前为止一切都很好,但是,当执行一个字符串大于 256 个字符的测试用例时,我遇到了一个错误。
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+ 个字符并引发错误。我真的不明白为什么会发生这种情况。当我明确声明它应该是 4000 时,为什么 HSQLDB 会将此列定义为 length="256"...
谁能帮忙?
最好的问候, 咻咻咻
【问题讨论】:
-
如何重新创建数据库?你在hibernate配置中指定SQL方言吗?
-
当然,我对 HSQLDB 使用以下内容:hibernate.dialect=org.hibernate.dialect.HSQLDialect hibernate.hbm2ddl.auto=create 而对于真正的数据库:hibernate.dialect=org。 hibernate.dialect.SQLServerDialect hibernate.hbm2ddl.auto=validate 数据库结构的重建工作完美。所有表、列、约束等都在那里并且功能齐全。唯一的问题似乎是长度“256”的东西......
-
你检查过数据库中列的定义吗?另外:应该编辑您自己问题的补充,而不是作为 cmets。