我要执行一条native sql 的查询,但发现执行不了,老是说对象名user无效
user表我没有进行映射,只是个表名,我希望执行后返回结果为List<Object>,然后再分析每行数据这只是个简单的查询例子,因为我真正要做的是多表查询,不想用hibernate 的对象映射,太麻烦感觉. 
public void test(){
final String sql="select top 10 userid,password from user";
this.getHibernateTemplate().execute(
new HibernateCallback(){
public Object doInHibernate(Session session)throws HibernateException{
List<Object> ls=(List<Object>)session.createSQLQuery(sql).list();
if(ls.size()>0){
for(int i=0;i<ls.size();i++){

  Object[] row=(Object[])ls.get(i);
  System.out.println("row[0]="+row[0].toString());
  System.out.println("row[1]="+row[1].toString());
}
}
return ls;
}
}
);
}

解决方案 »

  1.   

    使用的版本是Spring 1.2 , Hibernate 3.1
      

  2.   

    String sql="select top 10 userid,password from user"; 
    -------------------------------->
    String sql="select top 10 userid,password from [user]"; 
    加上 '[' 和 ']'
      

  3.   

    不对老兄,你是不是指user是系统关键字啊,加了也没用
      

  4.   

    不会吧,看一下完整错误吧,或者把
    List ls=session.createSQLQuery(sql).list(); 
      

  5.   

    public void test(){
    final String sql="select top 10 userid,password from user";
    this.getHibernateTemplate().execute(
    new HibernateCallback(){
    public Object doInHibernate(Session session)throws HibernateException{
    List<Object> ls=(List<Object>)session.createSQLQuery(sql).list();
    //session.createSQLQuery(sql).setResultSetMapping();
    if(ls.size()>0){
    for(int i=0;i<ls.size();i++){

      Object[] row=(Object[])ls.get(i);
      System.out.println("row[0]="+row[0].toString());
      System.out.println("row[1]="+row[1].toString());
    }
    }
    return ls;
    }
    }
    );
    }
      

  6.   

    public void test2(){
    try{
    String sql="select top 10 userid,password from user";
    this.getSession().createSQLQuery(sql).list();
    }
    catch(Exception ex){
    System.out.println(ex.getMessage());
    }

    }这样也无法执行native sql query,老是说user不是对象,难道必须做表到对象的映射吗,
    实际情况中,sql是传入的参数,我不知道他要访问那些表,所以无法做影射