[hibernate-issues] [Hibernate-JIRA] Commented: (HHH-3177) SetMaxResults with db2 database problem

Greg Atkinson (JIRA) noreply at atlassian.com
Thu Aug 21 04:53:39 EDT 2008


    [ http://opensource.atlassian.com/projects/hibernate/browse/HHH-3177?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_30966 ] 

Greg Atkinson commented on HHH-3177:
------------------------------------

I was receiving a very similar exception when trying to setMaxResults:

org.hibernate.exception.SQLGrammarException: could not execute query
	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
	at org.hibernate.loader.Loader.doList(Loader.java:2216)
	at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
	at org.hibernate.loader.Loader.list(Loader.java:2099)
	at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:94)
	at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1569)
	at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)
	at com.hsbc.za.hnet2.dao.common.BaseDAO.getList(BaseDAO.java:141)
	... 49 more
Caused by: java.sql.SQLException: [SQL0104] Token ( was not valid. Valid tokens: , FROM INTO.
	at com.ibm.as400.access.JDError.throwSQLException(JDError.java:650)
	at com.ibm.as400.access.JDError.throwSQLException(JDError.java:621)
	at com.ibm.as400.access.AS400JDBCStatement.commonPrepare(AS400JDBCStatement.java:1576)
	at com.ibm.as400.access.AS400JDBCPreparedStatement.<init>(AS400JDBCPreparedStatement.java:193)
	at com.ibm.as400.access.AS400JDBCConnection.prepareStatement(AS400JDBCConnection.java:2023)
	at com.ibm.as400.access.AS400JDBCConnection.prepareStatement(AS400JDBCConnection.java:1965)
	at com.ibm.as400.access.AS400JDBCConnectionHandle.prepareStatement(AS400JDBCConnectionHandle.java:916)
	at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.pmiPrepareStatement(WSJdbcConnection.java:1778)
	at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.prepareStatement(WSJdbcConnection.java:2017)
	at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.prepareStatement(WSJdbcConnection.java:1969)
	at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:505)
	at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:423)
	at org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:139)
	at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1547)
	at org.hibernate.loader.Loader.doQuery(Loader.java:673)
	at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
	at org.hibernate.loader.Loader.doList(Loader.java:2213)
	... 55 more

Turns out I was using the incorrect DB2 dialect, namely DB2Dialect, when I should have been using DB2400Dialect. Which makes total sense now because my datasource is a DB2 UDB for iSeries (AS400).

The difference is noticeable in the query generated by hibernate. While an ordirary sql query would have "select top(1000) * from MyTable..." the DB2400Dialect query has "... from MyTable fetch first 1000 rows only".

Perhaps one of Hibernate's other DB2 Dialects will solve your problem.

> SetMaxResults with db2 database problem
> ---------------------------------------
>
>                 Key: HHH-3177
>                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-3177
>             Project: Hibernate3
>          Issue Type: Bug
>          Components: core
>         Environment: hibernate3.2.0.ga,  DB2 8.2.1
>            Reporter: Irena
>
> Trying to do simple thing:
> List<Subject> subjects = (List<Subject>) currSession.createQuery("from Subject").setMaxResults(10).list();
> this prings fallowing: 
> WARN JDBCExceptionReporter:71 - SQL Error: -104, SQLState: 42601
> ERROR JDBCExceptionReporter:72 - DB2 SQL error: SQLCODE: -104, SQLSTATE: 42601, SQLERRMC: 10;select top ;.
> WARN JDBCExceptionReporter:71 - SQL Error: -727, SQLState: 56098
> ERROR JDBCExceptionReporter:72 - DB2 SQL error: SQLCODE: -727, SQLSTATE: 56098, SQLERRMC: 2;-104;42601;10|select top |.
> WARN JDBCExceptionReporter:71 - SQL Error: -727, SQLState: 56098
> ERROR JDBCExceptionReporter:72 - DB2 SQL error: SQLCODE: -727, SQLSTATE: 56098, SQLERRMC: 2;-104;42601;10|select top |.
> Exception in thread "main" org.hibernate.exception.SQLGrammarException: could not execute query
> 	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
> 	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
> 	at org.hibernate.loader.Loader.doList(Loader.java:2147)
> 	at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2028)
> 	at org.hibernate.loader.Loader.list(Loader.java:2023)
> 	at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:393)
> 	at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
> 	at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
> 	at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
> 	at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
> 	at ru.nbch.quality.logic.ReportProcessor.main(ReportProcessor.java:66)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> 	at java.lang.reflect.Method.invoke(Method.java:585)
> 	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:90)
> Caused by: com.ibm.db2.jcc.b.SqlException: DB2 SQL error: SQLCODE: -104, SQLSTATE: 42601, SQLERRMC: 10;select top ;.
> 	at com.ibm.db2.jcc.b.id.e(id.java:1640)
> 	at com.ibm.db2.jcc.b.id.a(id.java:1229)
> 	at com.ibm.db2.jcc.c.fb.h(fb.java:149)
> 	at com.ibm.db2.jcc.c.fb.a(fb.java:43)
> 	at com.ibm.db2.jcc.c.s.a(s.java:30)
> 	at com.ibm.db2.jcc.c.wb.g(wb.java:152)
> 	at com.ibm.db2.jcc.b.id.n(id.java:1209)
> 	at com.ibm.db2.jcc.b.jd.eb(jd.java:1779)
> 	at com.ibm.db2.jcc.b.jd.a(jd.java:2232)
> 	at com.ibm.db2.jcc.b.jd.V(jd.java:505)
> 	at com.ibm.db2.jcc.b.jd.executeQuery(jd.java:488)
> 	at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeQuery(NewProxyPreparedStatement.java:76)
> 	at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)
> 	at org.hibernate.loader.Loader.getResultSet(Loader.java:1668)
> 	at org.hibernate.loader.Loader.doQuery(Loader.java:662)
> 	at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
> 	at org.hibernate.loader.Loader.doList(Loader.java:2144)
> 	... 13 more

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the hibernate-issues mailing list