select
        top ? user0_.id as id0_,
        user0_.username as username0_,
        user0_.password as password0_,
        user0_.createTime as createTime0_,
        user0_.email as email0_,
        user0_.phone as phone0_ 
    from
        t_user user0_那个top 后面怎么会出现一个?号,以前查询的时候都是具体数字!
业务逻辑:
public List<User> searchUsers(int offSet, int pageSize)
{ String selectHql = "from User";
Session session = this.getHibernateTemplate().getSessionFactory().openSession();
List<User> users = session.createQuery(selectHql).setFirstResult(offSet).setMaxResults(pageSize).list();
session.close();
return users;
}UserAction:
public String user_list() throws MyException
{
//int pageSize = 5;
//int totalPages;
ActionContext act = ActionContext.getContext();
//List<User> users = this.um.searchUser();
List<User> usersPager = this.um.searchUsers(0,5);
//int totals = users.size();
//totalPages = (totals % pageSize == 0) ? (totals / pageSize) : (totals / pageSize) + 1 ;
//act.put("totalPages",totalPages);
act.put("users", usersPager);
return "user_list";
}如果:um.searchUsers(0,5); top 后面应该跟的是6 。
搞不懂了,望赐教!

解决方案 »

  1.   

    首先你用到的SQL语句是MS SQL 因为只有它才有 TOP 来描述前多少条记录
    um.searchUsers(0,5); 
    这个方法的意思是取第一页 每页5条记录 对应着MS SQL 的语句里是前 1到5条。
    如果你要找6到10条
    那方法应该是
    um.searchUsers(1,5);
      

  2.   

    问题还是得不到解决:异常:
    org.hibernate.exception.SQLGrammarException: could not execute query
    com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'limit 1 3 user0_.id as id0_, user0_.username as username0_, user0_.password as p' at line 1 高手,帮看下!
      

  3.   

    com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax;
     
    sql语法错误
      

  4.   

    HQL 语法没错误,在没分页的情况下我我测试过了!但在 分页时 就出现错误了。
      

  5.   


    不好意思,说错了,如果找6-10的记录那应该是第2页 方法应该是 um.searchUsers(5,5);setFirstResult(offSet)这里的offSet 的公式应该是 (n-1)*2 这里的2是每页多少条记录的数 。
    n是多少页。
    如果你要找第3页,那offSet应该是4。
      

  6.   

    上面说的我会,但就是查不出来:请看下面简单特例:
    @Test
    public void testHibernate()
    {
    Configuration config = new Configuration().configure();
    Session s = config.buildSessionFactory().openSession();
    Query query = s.createQuery("from User");
    query.setFirstResult(0); //从user表的第一条记录开始取
    query.setMaxResults(2);  //user表不只2条记录,我取2条特列
    List<User> users = query.list();

    for (int i=0;i<users.size();i++)
    {
    System.out.println(users.get(i).getId());;
    }
    s.close(); }后台显示SQL语句: (注意Top后面的问号)
    Hibernate: 
        select
            top ? user0_.id as id0_,
            user0_.username as username0_,
            user0_.password as password0_,
            user0_.createTime as createTime0_,
            user0_.email as email0_,
            user0_.phone as phone0_ 
        from
            t_user user0_异常:
    org.hibernate.exception.SQLGrammarException: could not execute query

    Caused by: java.sql.SQLException: 第 1 行: '@P0' 附近有语法错误。我原先以为是数据问题,现在从MYSQL换成Oracle到SQLserver 这个错误依旧。
    疑惑中.....
      

  7.   

    问题我找到原因了。
    Hibernate的dialect的设置问题。不同的数据设置的方言不同。RDBMS                 方言
    DB2                 org.hibernate.dialect.DB2Dialect
    DB2 AS/400         org.hibernate.dialect.DB2400Dialect
    DB2 OS390         org.hibernate.dialect.DB2390Dialect
    PostgreSQL       org.hibernate.dialect.PostgreSQLDialect
    MySQL                 org.hibernate.dialect.MySQLDialect
    MySQL with InnoDB org.hibernate.dialect.MySQLInnoDBDialect
    MySQL with MyISAM org.hibernate.dialect.MySQLMyISAMDialect
    Oracle (any version) org.hibernate.dialect.OracleDialect
    Oracle 9i/10g         org.hibernate.dialect.Oracle9Dialect
    Sybase                 org.hibernate.dialect.SybaseDialect
    Sybase Anywhere         org.hibernate.dialect.SybaseAnywhereDialect
    Microsoft SQL Server org.hibernate.dialect.SQLServerDialect
    SAP DB                 org.hibernate.dialect.SAPDBDialect
    Informix         org.hibernate.dialect.InformixDialect
    HypersonicSQL         org.hibernate.dialect.HSQLDialect
    Ingres                 org.hibernate.dialect.IngresDialect
    Progress         org.hibernate.dialect.ProgressDialect
    Mckoi SQL         org.hibernate.dialect.MckoiDialect
    Interbase         org.hibernate.dialect.InterbaseDialect
    Pointbase         org.hibernate.dialect.PointbaseDialect
    FrontBase         org.hibernate.dialect.FrontbaseDialect
    Firebird         org.hibernate.dialect.FirebirdDialect