当前位置: 首页 > 知识库问答 >
问题:

极限附近的Hibernate分页错误-SQL server

归鹤龄
2023-03-14

嗨,我是新的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();
  }
 }
}  

错误:“limit”附近的语法不正确。org.hibernate.exception.sqlgrammarexception:无法提取org.hibernate.exception.internal.sqlstateconversiondelegate.convert(sqlstateconversiondelegate.java:123)在org.hibernate.exception.internal.standardsqlexceptionconverter.convert(standardsqlexceptionconverter.49)在org.hibernate.engine.jdbc.spi.sqlexceptionhelper.convert(sqlexceptionhelper.126)在.dolist(loader.java:2537)在org.hibernate.loader.loader.list(loader.java:2367)在org.hibernate.loader.loader.list(loader.java:2362)在org.hibernate.loader.hql.queryloader.list(queryloader.java:496)在org.hibernate.loader.hql.queryloader.list(querytranslatorimpl.list(querytranslatorimpl.java:387)在

共有1个答案

万修然
2023-03-14

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

错误:

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

正确:

<property name="dialect">org.hibernate.dialect.SQLServer2012Dialect</property>
 类似资料:
  • 我只是想创建一个包含一列的表,并向其中添加一些值,但我得到了两个错误。一种是取消对db.close()的注释;句柄关闭太快,另一个是下面是代码。

  • 首先,有类似的问题,比如1,2,3,4,5,但没有提到解决这个问题的答案。 LogCat错误 09-02 05:27:31.213: E/SQLiteDatabase(8442):错误插入日=2个月=9值=3.0年=2015 09-02 05:27:31.213: E/SQLiteDatabase(8442):android.database.sqlite.SQLiteExc0019:近空:语法错

  • 问题内容: 我在堆栈中搜索,但没有一个达到最终答案。我的查询是这样的: 运行时,我收到语法分析错误: 我不知道该如何解决,问题出在哪里? 问题答案: 您需要稍微更改语法,请尝试以下操作:

  • 问题内容: 我有一个小查询,并在其旁边放了一个联合查询。但是,联合中存在语法错误。 这是我收到的错误 问题答案: 我知道出了什么问题。您必须在查询的末尾且仅在末尾下订单。它给了我一个错误,因为它认为查询已结束。 做到了。

  • 这是我的代码: LogCat说:12-11 23:43:50.553:E/AndroidRuntime(3706):android.database.sqlite.sqliteException:“create ;table”附近:语法错误(代码1):,编译时:create ;table PapersTable(_id integer ;primary ;key ;autoincrement,ti

  • 问题内容: 我正在使用MySQL存储财务资料,并使用数据来构建每个帐户的所有交易记录等。出于性能方面的考虑-为了防止用户被庞大的表格所淹没-我对结果进行了分页。 现在,作为注册的一部分,我将显示该帐户的余额。因此,如果我每页显示20个事务,而我显示第二页,则使用如下数据: 事务0-19: 忽略它们-它们比正在查看的页面要新。 交易20-39: 从中选择所有内容-它们会显示出来。 事务40-??: