0

Hi I am new to hibernate I am trying to do pagination but I am getting an error near the limit, I will really appreciate any help or guide thank you.

the error pointing in this line in my code

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

is it because the SQL server doesn't do limit it uses offset and fetch? I am not really sure why maybe someone can guide me thank you

Configuration 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 Code:

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'.

5
  • Can you share the generated SQL? Commented Aug 23, 2019 at 9:09
  • I am sorry what do you mean generated sql? Commented Aug 23, 2019 at 9:13
  • <property name="show_sql">true</property> the result of that Commented Aug 23, 2019 at 9:33
  • Hibernate: select tbl_batch0_.id as id1_0_, tbl_batch0_.username as username2_0_, tbl_batch0_.password as password3_0_ from tbl_batch tbl_batch0_ limit ? Commented Aug 23, 2019 at 9:42
  • the generated sql is this ; Hibernate: select tbl_batch0_.id as id1_0_, tbl_batch0_.username as username2_0_, tbl_batch0_.password as password3_0_ from tbl_batch tbl_batch0_ limit ? Commented Aug 23, 2019 at 9:44

1 Answer 1

0

You have configured MySQL dialect but are accessing a SQL Server database. You must set SQLServer2012Dialect to tell Hibernate the correct database dialect.

Wrong:

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

Correct:

<property name="dialect">org.hibernate.dialect.SQLServer2012Dialect</property>
Sign up to request clarification or add additional context in comments.

1 Comment

Thank you! You are great its working now really appreciate

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.