Subject | Exception "Data type unknown" on valid query, prepareStatement call |
---|---|
Author | Tim van der Leeuw |
Post date | 2015-10-05T18:13:56Z |
Hi,
I'm using Hibernate for database access. I have a Hibernate query which appears valid, and appears to generate valid SQL.
When trying to execute the query, I get an exception:
Dynamic SQL Error
SQL error code = -804
Data type unknown. Stacktrace follows:
Message: Dynamic SQL Error
SQL error code = -804
"Data type unknown"
Line | Method
->> 2092 | readStatusVector in org.firebirdsql.gds.impl.wire.AbstractJavaGDSImpl
Tracing back to the call:
result = conn.prepareStatement(sql);
The Hibernate query is:
select distinct p.id from ProcessingPersonalData p where :org in elements(p.executingOrganisations)
And the generated SQL is:
select distinct processing0_.id as col_0_0_
from processing_personal_data processing0_
inner join process processing0_1_ on processing0_.id=processing0_1_.id
where ? in (select executingo1_.organisation_id from ppd_exec_org executingo1_ where processing0_.id=executingo1_.ppd_id)
I can execute the statement in another query tool, and filling in a value for the '?' I get two rows of output, which matches my dataset - so the query itself does work.
For the query, I left out most result fields not relevant for testing the problem. There's still a JOIN which doesn't make sense in this dressed-down version of the query, but which is introduced by Hibernate.
For the purpose of this query, the tables and relevant fields are (in my opinion):
- Organisation (id: PK)
- Process(id: PK)
- ProcessingPersonalData(id: PK & FK to Process(id) ) - extension table of Process
- PPD_Exec_Org(PPD_ID: FK to ProcessingPersonalData(id), Organisation_ID: FK to Organisation(id) ) - link table to express m:n relation between entities Organisation & ProcessingPersonalData
The Hibernate version, in case it's relevant, is 3.6.10. Firebird version 2.5.4 for MacOS, JDBC driver version is 2.2.8 JDK8.
All the columns in this query have data type java.lang.Long in Java, Numeric(18,0) in the database.
I can probably make a workaround using a direct SQL query, but I'd appreciate if I could work with Hibernate.
I would appreciate if anyone can give some advice on what is wrong, if this is a bug in the driver, or elsewhere.
If more information is required I'd be happy to provide it.
Kind regards,
--Tim van der Leeuw
The full stack trace is:
2015-10-02 19:24:12,010 [http-bio-8080-exec-10] WARN util.JDBCExceptionReporter - SQL Error: 335544569, SQLState: 42000
| Error 2015-10-02 19:24:12,010 [http-bio-8080-exec-10] ERROR util.JDBCExceptionReporter - GDS Exception. 335544569. Dynamic SQL Error
SQL error code = -804
Data type unknown
| Error 2015-10-02 19:24:12,047 [http-bio-8080-exec-10] ERROR errors.GrailsExceptionResolver - GDSException occurred when processing request: [GET] /pp-app/externalOrganisation/show/17 - parameters:
role: PROCESSOR
_from: 39-45
Dynamic SQL Error
SQL error code = -804
Data type unknown. Stacktrace follows:
Message: Dynamic SQL Error
SQL error code = -804
"Data type unknown"
Line | Method
->> 2092 | readStatusVector in org.firebirdsql.gds.impl.wire.AbstractJavaGDSImpl
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 2042 | receiveResponse in ''
| 1465 | iscDsqlPrepare . . . . . . . . . . . . in ''
| 197 | prepareStatement in org.firebirdsql.gds.impl.GDSHelper
| 1434 | prepareFixedStatement . . . . . . . . in org.firebirdsql.jdbc.AbstractStatement
| 1283 | prepareFixedStatement in org.firebirdsql.jdbc.AbstractPreparedStatement
| 135 | <init> . . . . . . . . . . . . . . . . in ''
| 45 | <init> in org.firebirdsql.jdbc.FBPreparedStatement
| -1 | newInstance . . . . . . . . . . . . . in sun.reflect.GeneratedConstructorAccessor133
| 45 | newInstance in sun.reflect.DelegatingConstructorAccessorImpl
| 422 | newInstance . . . . . . . . . . . . . in java.lang.reflect.Constructor
| 1075 | jlrConstructorNewInstance in org.springsource.loaded.ri.ReflectiveInterceptor
| 89 | createPreparedStatement . . . . . . . in org.firebirdsql.jdbc.FBStatementFactory
| 1186 | prepareStatement in org.firebirdsql.jdbc.AbstractConnection
| 941 | prepareStatement . . . . . . . . . . . in ''
| 895 | prepareStatement in ''
| 322 | prepareStatement . . . . . . . . . . . in ''
| 534 | getPreparedStatement in org.hibernate.jdbc.AbstractBatcher
| 452 | getPreparedStatement . . . . . . . . . in ''
| 161 | prepareQueryStatement in ''
| 1700 | prepareQueryStatement . . . . . . . . in org.hibernate.loader.Loader
| 801 | doQuery in ''
| 274 | doQueryAndInitializeNonLazyCollections in ''
| 2542 | doList in ''
| 2276 | listIgnoreQueryCache . . . . . . . . . in ''
| 2271 | list in ''
| 459 | list . . . . . . . . . . . . . . . . . in org.hibernate.loader.hql.QueryLoader
| 365 | list in org.hibernate.hql.ast.QueryTranslatorImpl
| 196 | performList . . . . . . . . . . . . . in org.hibernate.engine.query.HQLQueryPlan
| 1268 | list in org.hibernate.impl.SessionImpl
| 102 | list . . . . . . . . . . . . . . . . . in org.hibernate.impl.QueryImpl