java - setMaxResult 无法在带有 Hibernate 的 MSSQL Server 2014 中工作

标签 java sql-server hibernate jpa jdbc

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

  • LIMIT 在 SQL Server 中不受支持
  • 字符串查询=“从表限制中选择不同的ID” + 偏移量 + ", "+ noOfRecords;

  • ROW_NUMBER() 不是一个好的解决方案,因为我想要不同的记录
  • 最佳答案

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

    关于java - setMaxResult 无法在带有 Hibernate 的 MSSQL Server 2014 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32495157/

    相关文章:

    java - 当点击 JButton 连接到服务器时,程序卡住

    Java: 'agent' 对象内部的 'world' 对象如何获取有关 'world' 的信息?

    .net - 如何停止 Entity Framework 缓存

    sql - 查找区分大小写的记录

    c# - 如何将 Byte[] 转换为数据以在 SQL Server 的 varbinary(max) 列中插入值?

    sql - Hibernate等于 "select 1 from DUAL"是什么?

    java - Hibernate与同一实体的递归多对多关联

    hibernate - 无法使用 SpringBoot 延迟初始化角色集合

    java - 如何在调用存储过程时从前端设置 INOUT 参数

    java - C++ 等价于使用 <T extends Class> 作为 java 参数/返回类型