【问题标题】:setMaxResult not working in MSSQL server 2014 with HibernatesetMaxResult 在 MSSQL server 2014 中无法使用 Hibernate
【发布时间】:2015-12-06 08:15:09
【问题描述】:
Query query = entityManager.createQuery("select distinct(id) From Table where plant=?1").setParameter(1, plant);
        query.setFirstResult((pageNo-1) * pageSize); 
        query.setMaxResults(pageSize);
        List<String> Ids = query.getResultList();

这段代码在 SQL Server 2008 上运行良好,但是当我将数据库从 2008 年迁移到 2014 年时,这给了我以下错误:

Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: The requested operation is not supported on forward only result sets.
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:170)
    at com.microsoft.sqlserver.jdbc.SQLServerResultSet.throwNotScrollable(SQLServerResultSet.java:376)
    at com.microsoft.sqlserver.jdbc.SQLServerResultSet.verifyResultSetIsScrollable(SQLServerResultSet.java:399)
    at com.microsoft.sqlserver.jdbc.SQLServerResultSet.absolute(SQLServerResultSet.java:1474)
    at org.jboss.jca.adapters.jdbc.WrappedResultSet.absolute(WrappedResultSet.java:131)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.hibernate.engine.jdbc.internal.proxy.AbstractResultSetProxyHandler.continueInvocation(AbstractResultSetProxyHandler.java:104)
    ... 170 more

我尝试过以下操作: 1. jdbc驱动由sqljdbc4.0.jar改为sqljdbc4.2.jar

  1. sql server 不支持LIMIT

String query = "select distinct ID from Table limit" + 偏移量 + ", " + noOfRecords;

  1. ROW_NUMBER() 不是一个好的解决方案,因为我想要不同的记录

【问题讨论】:

  • 问题在于 Hibernate 调用只在可滚动结果集上可用和支持(按规范!)的只进结果集的方法。您需要向 Hibernate 提交一个错误,如果他们要调用这些方法,他们应该明确要求可滚动的结果集。请注意,SQL Server 可能不知道LIMIT,但它确实知道TOP,请参阅msdn.microsoft.com/en-us/library/ms176104.aspx
  • @rohit-k 你最后解决了这个问题吗?怎么样?
  • @Krzysiek 无法解决...我已要求客户端开发人员在那里处理分页 :-)

标签: java sql-server hibernate jpa jdbc


【解决方案1】:

看看Wrong hibernate dialect for MSSQL 2014。我认为这可能与为 SQL Server 2014 的 Hibernate 解决的错误方言有关

【讨论】:

  • 我同意。我遇到了这个确切的问题,配置 SQLServer2012Dialect 为我解决了这个问题。
【解决方案2】:

在此处查看此解决方法:https://stackoverflow.com/a/37423126/1255493

这解决了我的问题。

【讨论】:

    猜你喜欢
    • 2012-07-24
    • 1970-01-01
    • 1970-01-01
    • 2016-05-05
    • 2021-08-03
    • 2016-09-29
    • 1970-01-01
    • 2014-12-11
    • 2018-03-22
    相关资源
    最近更新 更多