有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

升级到HSQL 2.0.1后的java。rc3有很多组织。hsqldb。HsqlException:数据异常:。。。投诉

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

Caused by: org.hsqldb.HsqlException: data exception: invalid character value for cast

不幸的是,异常消息很差,几乎没有提示哪个列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


共 (3) 个答案

  1. # 1 楼答案

    在打包hsqldb的自定义版本时,我们遇到了同样的问题(需要修复此问题Hibernate/hsqldb 2 Cannot Hydrate Blob Column

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

    检查HSQLDBJAR依赖项的内部,看看它是否包含任何组织。休眠类

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

    System.out.println(
        new HSQLDialect().getClass().getProtectionDomain().getCodeSource());
    
  2. # 2 楼答案

    我刚刚遇到了一个类似的问题,升级到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);
    

    This answer让我找到了原因:默认情况下,DBUnit不会转义'user'关键字,这解释了为什么错误消息的值为“SA”,这是默认的HSQLDB系统用户。但是,DBUnit确实允许您configure escaping,这解决了问题

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

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

    摘要:

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

  3. # 3 楼答案

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