java - Hibernate 分页错误接近限制 - SQL Server

标签 java sql sql-server hibernate netbeans

您好,我是 hibernate 新手,我正在尝试进行分页,但我收到接近极限的错误,我将非常感谢任何帮助或指导,谢谢。

我的代码中这一行的错误指向

q.setFirstResult(0);
q.setMaxResults(2);

是不是因为SQL Server没有限制它使用offset和fetch? 我不太确定为什么也许有人可以指导我谢谢

配置 XML:

<?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate       Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
  <hibernate-configuration>
  <session-factory>
<!-- Database connection properties -->
<property name="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
<property name="connection.url">jdbc:sqlserver://localhost:1433;databaseName=tabletest;user=test;password=test123;</property>
<property name="connection.username">test</property>
<property name="connection.password">test123</property>
<!-- JDBC connection pool (using the built-in) -->
<property name="connection.pool_size">100</property>
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>
<property name="hibernate.current_session_context_class">thread</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<!-- Format the generated Sql -->
<property name="format_sql">true</property>
<!-- Dont Drop and re-create the database schema on startup,Just update it -->
<property name="hbm2ddl.auto">update</property>
<mapping class="" file="" jar="" package="" resource="com/kb/model/inserthbm.xml"/>
<mapping class="com.kb.model.inserttbl_backup" file="" jar="" package="" resource="com/kb/model/inserthbm_2.xml"/>
</session-factory>
</hibernate-configuration>

Java 代码:

import com.kb.model.tbl_batch;
import java.util.Date;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;
import com.kb.model.tbl_batch;
import java.util.Iterator;
public class PaginationInHibernateWithQueryResults {

  public static void main(String[] args)  
  {
  Configuration c = new Configuration();
  c.configure("/hibernate.cfg.xml");
  SessionFactory sf = c.buildSessionFactory();
  Session s = sf.openSession();

  List<tbl_batch> result = null;
  try 
  {
  Query q = s.createQuery("from tbl_batch");
  q.setFirstResult(0);
  q.setMaxResults(2);
  result = q.list();                // first two records, 0 and 1
                                    // printing records using Iterator 
  Iterator it = result.iterator();
  while(it.hasNext())
  {
    tbl_batch std = (tbl_batch) it.next();
      System.out.println(std.getId() + "  " + std.getusername() + "  " +     std.getpassword());
  }

  q.setFirstResult(2);
  q.setMaxResults(3);               // now you get 3 records starting from 2nd (0, 1, 2)
  result = q.list();                // next three records, 2, 3 and 4
                        // printing elements with JDK 1.5 enhanced for loop
  for(tbl_batch std : result)
  {
 System.out.println(std.getId() + "  " + std.getusername() + "  " + std.getpassword());
  }

  q.setFirstResult(5); 
  // q.setMaxResults(3);               // this statement is not needed as earlier max results size is used
  result = q.list();                // next two records, 5 and 6 (but here, we get only two 
                                    // because total records are 7 (0 to 6))
  for(tbl_batch std : result)
  {
  System.out.println(std.getId() + "  " + std.getusername() + "  " + std.getpassword());
  }
} 
catch (Exception e) 
{
  e.printStackTrace();
  }
 }
}  

ERROR: Incorrect syntax near 'limit'. org.hibernate.exception.SQLGrammarException: could not extract ResultSet at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:123) at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49) at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126) at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:112) at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:89) at org.hibernate.loader.Loader.getResultSet(Loader.java:2065) at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1862) at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1838) at org.hibernate.loader.Loader.doQuery(Loader.java:909) at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:354) at org.hibernate.loader.Loader.doList(Loader.java:2551) at org.hibernate.loader.Loader.doList(Loader.java:2537) at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2367) at org.hibernate.loader.Loader.list(Loader.java:2362) at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:496) at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:387) at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:229) at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1260) at org.hibernate.internal.QueryImpl.list(QueryImpl.java:103) at PaginationInHibernateWithQueryResults.main(PaginationInHibernateWithQueryResults.java:34) Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near 'limit'.

最佳答案

您已配置 MySQL 方言,但正在访问 SQL Server 数据库。您必须设置 SQLServer2012Dialect 来告诉 Hibernate 正确的数据库方言。

错误:

<property name="dialect">org.hibernate.dialect.MySQLDialect</property>

正确:

<property name="dialect">org.hibernate.dialect.SQLServer2012Dialect</property>

关于java - Hibernate 分页错误接近限制 - SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57622739/

相关文章:

java - 防止 Java 在某些异常情况下打印堆栈跟踪

如果两个条件都为真,则 MySQL 插入如果不存在则更新

sql-server - 为什么我不能在SQL Server 2008中注册System.Web?

html - 将不安全的 HTML 字符编码为 HTML 字符实体引用的 T-SQL 算法

sql - Postgres 连续天、间隙和岛屿、Tabibitosan

sql-server - 如何使 SQL Server 在比较带有和不带有尾随空格的 varchar 时返回 FALSE?

java - 为什么 javax.servlet 包只作为应用程序服务器的一部分分发?

java - java中分割字符串

java - 将 @ElementCollection 映射到同一个表

c# - 将正则表达式转换为 SQL