Hibernate5 MSSql分页问题处理
来源:互联网 发布:淘宝网是阿里巴巴的吗 编辑:程序博客网 时间:2024/05/16 05:57
1、前言
hibernate的分页查询,代码如下
/** * 分页查询(适用于Easyui分页) * 局限:排序仅支持单表 * @param hql HQL 如:'from MyTable o' * @param pageParams 分页参数 * @return 结果集 */ @Override @SuppressWarnings("unchecked") public List<Entity> queryByPage(String hql, PageParams pageParams) { try { if(StringUtils.notNull(pageParams.getOrder())&&StringUtils.notNull(pageParams.getSort())){ hql += " order by o." + pageParams.getSort() + " " + pageParams.getOrder(); } Query query = getQuery(hql); query.setFirstResult((pageParams.getPage() - 1) * pageParams.getRows()); query.setMaxResults(pageParams.getRows()); return query.list(); } catch (Exception e) { e.printStackTrace(); log.error("分页查询出现异常 hql={}",hql, e); return null; } }
说明,hibernate版本为5,数据库为mssql。
2、问题描述
错误日志:
17/06/08 14:12:56 DEBUG spi.SqlExceptionHelper: could not extract ResultSet [n/a]com.microsoft.sqlserver.jdbc.SQLServerException: '@P0' 附近有语法错误。 at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:216) at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1515) at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:404) at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:350) at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:5696) at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1715) at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:180) at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:155) at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQuery(SQLServerPreparedStatement.java:285) at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_executeQuery(FilterChainImpl.java:2714) at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_executeQuery(FilterEventAdapter.java:465) at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_executeQuery(FilterChainImpl.java:2711) at com.alibaba.druid.proxy.jdbc.PreparedStatementProxyImpl.executeQuery(PreparedStatementProxyImpl.java:145) at com.alibaba.druid.pool.DruidPooledPreparedStatement.executeQuery(DruidPooledPreparedStatement.java:227) at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:70) at org.hibernate.loader.Loader.getResultSet(Loader.java:2117) at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1900) at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1876) at org.hibernate.loader.Loader.doQuery(Loader.java:919) at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:336) at org.hibernate.loader.Loader.doList(Loader.java:2617) at org.hibernate.loader.Loader.doList(Loader.java:2600) at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2429) at org.hibernate.loader.Loader.list(Loader.java:2424) at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:501) at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:371) at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:216) at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1326) at org.hibernate.internal.QueryImpl.list(QueryImpl.java:87) at com.hcepms.base.dao.BaseDaoImpl.queryByPage(BaseDaoImpl.java:131) at com.hcepms.system.service.impl.OrganizationServiceImpl.queryOrganizationsByPage(OrganizationServiceImpl.java:66) at com.hcepms.system.controller.OrganizationController.queryOrganizationsByPage(OrganizationController.java:70) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:832) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:743) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:961) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:895) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:967) at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:869) at javax.servlet.http.HttpServlet.service(HttpServlet.java:648) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:843) at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) at org.springframework.orm.hibernate5.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:151) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1099) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:670) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:745)17/06/08 14:12:56 WARN spi.SqlExceptionHelper: SQL Error: 102, SQLState: S000117/06/08 14:12:56 ERROR spi.SqlExceptionHelper: '@P0' 附近有语法错误。
3、问题解决方法
query.setMaxResults(pageParams.getRows());
改为:
query.setFetchSize(pageParams.getRows());
修改后,数据可以正确加载。但后台还是报错。
日志:
17/06/08 14:28:13 WARN spi.SqlExceptionHelper: SQL Error: 102, SQLState: S000117/06/08 14:28:13 ERROR spi.SqlExceptionHelper: '@P0' 附近有语法错误。
4、再次处理
修改hibernate方言
#hibernate.dialect=org.hibernate.dialect.SQLServerDialecthibernate.dialect=org.hibernate.dialect.SQLServer2008DialectvalidationQuery=SELECT 1driverClassName = com.microsoft.sqlserver.jdbc.SQLServerDriverjdbc_url = jdbc\:sqlserver\://127.0.0.1\:1433;DatabaseName\=testjdbc_username = sajdbc_password = 123456hibernate.hbm2ddl.auto=nonehibernate.show_sql=falsehibernate.format_sql=falsehibernate.use_sql_comments=truehibernate.connection.release_mode=on_close
将
hibernate.dialect=org.hibernate.dialect.SQLServerDialect
改为
hibernate.dialect=org.hibernate.dialect.SQLServer2008Dialect
这次ok,数据正确加载,后台也不再报错。
5、query.setMaxResults与query.setFetchSize方法说明
query.setFetchSize方法:缺省时,驱动程序一次从查询里获取所有的结果。这样可能对于大的数据集来说是不方便的, 因此 JDBC 驱动提供了一个方法从一个数据库游标伤抽取少数几行的 ResultSet 的方法。
setMaxRows():是设置Resultset最多返回的行数 。
setFetchSize()设置从数据库取得多行的行数大小。
阅读全文
0 0
- Hibernate5 MSSql分页问题处理
- Hibernate5+sqlserver2008 分页问题
- mssql server 安装问题处理
- mssql分页
- mssql分页
- MSSQL分页
- hibernate5+sql server2012 分页异常
- hibernate5+sql server2012 分页异常
- [MSSQL]2分处理数据分页存储过程
- 处理分页问题
- ibatis处理sybase分页问题
- mssql分页存储过程
- PHP+MSSQL分页源码
- mssql 分页程序
- mssql 的分页精髓。。。
- MSSQL分页存储过程
- MSSQL执行分页查询
- MSSQL分页查询语句
- 面试题22:栈:栈的压入和弹出序列
- Openfoam学习记录(2017.06.08)
- 俄罗斯方块全功能简化版
- 中国科技论文统计结果
- 从今天开始记录我的学习过程
- Hibernate5 MSSql分页问题处理
- ugui文字颜色水平渐变
- windows+tensorflow+pycharm
- 回音消除原理解析及Android应用
- JavaSocket实现TCP编程
- 使用BigDecimal进行科学计算表示方式的转换
- Android数据存储之SQLCipher数据库加密
- 学习笔记——JAVA字节码操作 Javassist的用法
- SlidingMenu侧滑的简单使用