Java 升级到HSQL 2.0.1.rc3后-大量org.hsqldb.HsqlException:数据异常:。。。投诉

Java 升级到HSQL 2.0.1.rc3后-大量org.hsqldb.HsqlException:数据异常:。。。投诉,java,hsqldb,Java,Hsqldb,我最近将HSQL从1.8.0.10升级到2.0,然后升级到2.0.1.rc3,代码或测试数据没有任何更改。我有很多以前有效的测试,现在我得到了很多涉及“铸造”的异常 不幸的是,异常消息很差,几乎没有提示哪个列etc不好 其他例外情况表明,它正试图将sysadmin用户名投诉为long Caused by: org.hsqldb.HsqlException: incompatible data type in conversion: from SQL type VARCHAR to java.la

我最近将HSQL从1.8.0.10升级到2.0,然后升级到2.0.1.rc3,代码或测试数据没有任何更改。我有很多以前有效的测试,现在我得到了很多涉及“铸造”的异常

不幸的是,异常消息很差,几乎没有提示哪个列etc不好

其他例外情况表明,它正试图将sysadmin用户名投诉为long

Caused by: org.hsqldb.HsqlException: incompatible data type in conversion: from SQL type VARCHAR to java.lang.Long, value: SA
    at org.hsqldb.error.Error.error(Error.java:77)
    ... 54 more
真正奇怪的是,我在内存模式下使用HSQL,启动时是空的,从来没有设置任何访问内容

PS


我还将Hibernate更新为3.6。

在2.x版中,自动转换行为变得更加严格。这可能是问题的原因,但如果没有看到实际的表定义和Hibernate执行的语句,就无法说出在哪里。使用最新的HSQLDB RC运行广泛的Hibernate测试套件时,几乎没有(和不相关的)错误。

在打包自定义版本的HSQLDB时,我们遇到了相同的问题(需要修复此问题)

当前的hsqldb源JAR包含org.hibernate的旧版本,该版本不能正确识别hsqldb版本(讽刺)。如果此源包含在您的构建中,那么它可能会覆盖该类的实际hibernate 3.6版本

检查hsqldb jar依赖项的内部,看看它是否包含任何org.hibernate类

或者尝试在代码中输入以下内容,以查看所使用的方言来自何处:

System.out.println(
    new HSQLDialect().getClass().getProtectionDomain().getCodeSource());

我刚刚遇到了一个类似的问题,升级到HSQLDB 2.2.9后,一些单元测试开始失败,并显示以下错误消息:

java.sql.SQLSyntaxErrorException: incompatible data type in conversion: from SQL type VARCHAR to java.math.BigDecimal, value: SA
该问题仅在使用DBUnit操作数据集时出现,在使用Hibernate时没有问题。打开JDBC日志记录后,我发现DBUnit在进行如下选择后失败:

select id, user from MYTABLE order by id

// then, SQLSyntaxErrorException when DBUnit tried to retrieve the 'user' column:
BigDecimal userId = resultSet.getBigDecimal(2);
导致我的原因是:默认情况下,DBUnit不会转义'user'关键字,这解释了为什么错误消息的值为“SA”,这是默认的HSQLDB系统用户。但是,DBUnit确实允许您使用,这解决了问题

最后,Hibernate没有问题的原因是它生成的SQL更加明确,例如

select mytable0.id, mytable0.user from MYTABLE mytable0 order by mytable0.id

摘要:


找出哪个库没有在SQL语句中转义关键字

Hi-THanx for HSQL-是否可能在异常消息中包含实际有问题的列、from和to类型以及可能的数据。这将在将来得到改进。但是,当您使用Hibernate时,您可以在Hibernate中打开语句执行的详细报告,并找到有问题的语句。另一个可能的原因是存在多个HSQLDB JAR,因为SA到Long的类型转换似乎不太可能。很多情况下,这些异常发生在Hibernate的启动阶段。我在cp上只有一个hsqldb.jar。您总是可以向hsqldb项目发送一个测试用例,其中包括一些启动并显示问题。
select mytable0.id, mytable0.user from MYTABLE mytable0 order by mytable0.id