sajt.gome.clt.gui.util.SajtException:org.hibernate.exception.SQLGrammarException: could not execute query
at sajt.gome.clt.cl.VatDocumentManager.query(VatDocumentManager.java:136)
atsajt.gome.clt.gui.WndVatDocumentBrowseMerge.fillTableMaster(WndVatDocumentBrowseMerge.java:284)
atsajt.gome.clt.gui.WndVatDocumentBrowseMerge.query(WndVatDocumentBrowseMerge.java:389)
atsajt.gome.clt.gui.WndVatDocumentBrowseMerge.access$0(WndVatDocumentBrowseMerge.java:374)
atsajt.gome.clt.gui.WndVatDocumentBrowseMerge$1.widgetSelected(WndVatDocumentBrowseMerge.java:109)
atorg.eclipse.swt.widgets.TypedListener.handleEvent(Unknown Source)
atorg.eclipse.swt.widgets.EventTable.sendEvent(Unknown Source)
atorg.eclipse.swt.widgets.Widget.sendEvent(Unknown Source)
atorg.eclipse.swt.widgets.Display.runDeferredEvents(Unknown Source)
at org.eclipse.swt.widgets.Display.readAndDispatch(UnknownSource)
atorg.eclipse.jface.window.Window.runEventLoop(Window.java:825)
atorg.eclipse.jface.window.Window.open(Window.java:801)
atsajt.core.gui.SajtAppWindow.run(SajtAppWindow.java:102)
at sajt.gome.clt.gui.App.start(App.java:52)
atsajt.gome.clt.gui.App.main(App.java:161)
Caused by:org.hibernate.exception.SQLGrammarException: could not execute query
atorg.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
atorg.hibernate.loader.Loader.doList(Loader.java:2235)
atorg.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2129)
atorg.hibernate.loader.Loader.list(Loader.java:2124)
at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:118)
atorg.hibernate.impl.SessionImpl.list(SessionImpl.java:1597)
atorg.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:306)
atsajt.gome.clt.dal.VatDocumentDAO.query(VatDocumentDAO.java:231)
atsajt.gome.clt.cl.VatDocumentManager.query(VatDocumentManager.java:133)
... 14 more
Caused by: java.sql.SQLException:ORA-01795: 列表中的最大表达式数为 1000
atoracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:113)
atoracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
atoracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
atoracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:754)
atoracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:219)
atoracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:813)
atoracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1051)
atoracle.jdbc.driver.T4CPreparedStatement.executeMaybeDescribe(T4CPreparedStatement.java:854)
atoracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1156)
atoracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3415)
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3460)
atorg.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:208)
atorg.hibernate.loader.Loader.getResultSet(Loader.java:1812)
at org.hibernate.loader.Loader.doQuery(Loader.java:697)
atorg.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
atorg.hibernate.loader.Loader.doList(Loader.java:2232)
原因为执行的SQL语句中使用了in,当in后面的列表或子查询超过1000条就会触发该错误
解决办法为如果是子查询可以把子查询改为表连接的方式,如果是列表可以改为or的方式执行。