【问题标题】:Java/Hibernate + HSQLDB java.sql.BatchUpdateException: data exception: string data, right truncationJava/Hibernate + HSQLDB java.sql.BatchUpdateException: 数据异常:字符串数据,右截断
【发布时间】: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。

标签: java sql hibernate hsqldb


【解决方案1】:

好吧,无论出于何种原因,HSQLDB 似乎都将配置文件中指定的某些类型和值映射到它创建的真实表。

我能够通过将“type”属性更改为 type=text 来解决此问题。现在一切正常。我只是希望在我完成测试应用程序后它仍然可以使用原始 MSSQL DB 并将文本映射到 varchar 然后......

【讨论】:

    猜你喜欢
    • 2012-10-04
    • 1970-01-01
    • 2020-07-26
    • 2017-09-10
    • 2018-01-12
    • 2019-02-13
    • 2016-05-28
    • 1970-01-01
    • 2018-07-06
    相关资源
    最近更新 更多