JPA Hibernate HSQLDB - VARBINARY() 字段和错误尝试选择

Posted

技术标签:

【中文标题】JPA Hibernate HSQLDB - VARBINARY() 字段和错误尝试选择【英文标题】:JPA Hibernate HSQLDB - VARBINARY() field and error attempting to select 【发布时间】:2011-07-21 03:40:43 【问题描述】:

我在HSQLDB: Duplicate column name, unsupported internal operation: Type, invalid character for cast 找到了一个类似的问题,但没有可理解的答案。我还查看了http://old.nabble.com/unsupported-internal-operation%3A-StatementDMQL-td27427172.html,它报告问题是 HSQLDB 中的一个错误,但它应该在我使用的版本(2.2)中得到修复。所以,这里是问题的细节:

我有一个实体,它在 HSQLDB 的 VARBINARY(128) 字段中存储一些字节 [] 数据。表创建成功,但是当我尝试从表中选择时,我得到以下堆栈跟踪:

java.sql.SQLException: java.lang.RuntimeException: unsupported internal operation: Type java.lang.RuntimeException: unsupported internal operation: Type
    at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
    at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
    at org.hsqldb.jdbc.JDBCPreparedStatement.fetchResult(Unknown Source)
    at org.hsqldb.jdbc.JDBCPreparedStatement.executeQuery(Unknown Source)
    at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeQuery(NewProxyPreparedStatement.java:76)
    at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:208)
    at org.hibernate.loader.Loader.getResultSet(Loader.java:1953)
    at org.hibernate.loader.Loader.doQuery(Loader.java:802)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274)
    at org.hibernate.loader.Loader.doList(Loader.java:2533)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276)
    at org.hibernate.loader.Loader.list(Loader.java:2271)
    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:452)
    at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:363)
    at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
    at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1268)
    at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
    at org.hibernate.ejb.QueryImpl.getSingleResult(QueryImpl.java:274)
    at com.dns.recursive.ipcache.data.CacheWrapper.findEntry(CacheWrapper.java:206)
    at com.dns.recursive.ipcache.net.TCPWorker.run(TCPWorker.java:114)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:636)
Caused by: org.hsqldb.HsqlException: java.lang.RuntimeException: unsupported internal operation: Type
    at org.hsqldb.error.Error.error(Unknown Source)
    at org.hsqldb.result.Result.newErrorResult(Unknown Source)
    at org.hsqldb.StatementDMQL.execute(Unknown Source)
    at org.hsqldb.Session.executeCompiledStatement(Unknown Source)
    at org.hsqldb.Session.execute(Unknown Source)
    ... 21 more
Caused by: java.lang.RuntimeException: unsupported internal operation: Type
    at org.hsqldb.error.Error.runtimeError(Unknown Source)
    at org.hsqldb.types.Type.subtract(Unknown Source)
    at org.hsqldb.ExpressionArithmetic.getValue(Unknown Source)
    at org.hsqldb.ExpressionOrderBy.getValue(Unknown Source)
    at org.hsqldb.QuerySpecification.buildResult(Unknown Source)
    at org.hsqldb.QuerySpecification.getSingleResult(Unknown Source)
    at org.hsqldb.QuerySpecification.getResult(Unknown Source)
    at org.hsqldb.StatementQuery.getResult(Unknown Source)
    ... 24 more

我真的可以使用一些帮助来找出原因。提前致谢!!

【问题讨论】:

【参考方案1】:

不支持的内部操作是一个通用错误,它报告发生错误的类。它是防止错误的低级防线。通常在发生此类错误之前,会捕获并报告 SQL 错误。在这种情况下,它不会被捕获。其他具有相同错误字符串的异常报告可能完全不相关。

您需要报告 CREATE TABLE 语句和针对它运行的 SELECT 语句。

堆栈跟踪表明存在一个 ORDER BY 子句,其中包含 ORDER BY A - B 之类的内容,其中 A 或 B 不是数字。

【讨论】:

感谢您的回答!这听起来完全合理,但我已经对我的代码进行了分支并以不同的方式解决了这个问题。

以上是关于JPA Hibernate HSQLDB - VARBINARY() 字段和错误尝试选择的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 JPA 2.0、Spring 2.5.6、Hibernate 3.6.1 和 Maven 在 HSQLDB 中持久化

使用 Hibernate 和 HSQLDB 找不到表

JPA + Hibernate,避免丢表

带有 Hibernate 4.3.6 的 HSQLDB 2.3.2 中的语法错误

HSQLDB - 无效的授权规范

JavaConfig - Spring JPA Hibernate - @EnableTransactionManagement