升级到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
# 1 楼答案
在打包hsqldb的自定义版本时,我们遇到了同样的问题(需要修复此问题Hibernate/hsqldb 2 Cannot Hydrate Blob Column)
当前的hsqldb源JAR包含旧版本的org。hibernate无法正确识别hsqldb版本(讽刺)。如果此源代码包含在您的构建中,那么它可能会覆盖该类的实际hibernate 3.6版本
检查HSQLDBJAR依赖项的内部,看看它是否包含任何组织。休眠类
或者尝试在代码中输入以下内容,以查看所使用的方言来自何处:
# 2 楼答案
我刚刚遇到了一个类似的问题,升级到HSQLDB 2.2.9后,一些单元测试开始失败,并显示以下错误消息:
该问题仅在使用DBUnit操作数据集时出现,在使用Hibernate时没有问题。打开JDBC日志记录后,我发现DBUnit在进行如下选择后失败:
This answer让我找到了原因:默认情况下,DBUnit不会转义'user'关键字,这解释了为什么错误消息的值为“SA”,这是默认的HSQLDB系统用户。但是,DBUnit确实允许您configure escaping,这解决了问题
最后,Hibernate没有问题的原因是它生成的SQL更加明确,例如
摘要:
找出哪个库没有在SQL语句中转义关键字
# 3 楼答案
在版本2中,自动转换行为变得更加严格。x、 这可能是问题的原因,但如果没有看到实际的表定义和Hibernate执行的语句,就无法说出在哪里。使用最新的HSQLDB RC,广泛的Hibernate测试套件运行时几乎没有(且不相关)错误