数据库是SQL Server2000,有张表Table,主键列名id,其余列名name
id是int自增长类型
现在遇到个问题,在hibernate中用hql语句查找多个id的记录,下面语句是在DAO类里的
String strHQL = "from Table where id in (1,2,3)";
return getHibernateTemplate().find(strHQL);//可以得到正确记录但是
String strHQL = "from Table where id in (?)";
return getHibernateTemplate().find(strHQL,参数);//这边这个参数该怎么写?
我用String类型的"1,2,3",会报类型转换错误,我知道是跟数据库里的int类型不对应,但是就是不清楚该怎么写,特来求教!
数据库映射什么的都没问题,hql可以查出数据的

解决方案 »

  1.   

    多用两个占位符?,?   from Table where id in (?,?,?)
      

  2.   

    根据ID个数拼串啊肯定知道具体某次调用时的ID个数吧  用循环拼串那么多个?
      

  3.   

    用这样可以实现,不过没有智能一点的方法了吗? public List findAllByIds(int... is)
    {
    StringBuffer sb = new StringBuffer();
    sb.append("from Table where id in (");
    for (int i : is)
    {
    sb.append(i).append(",");
    }
    sb.deleteCharAt(sb.length() - 1);
    sb.append(")"); return getHibernateTemplate().find(sb.toString());
    }
      

  4.   

    新写的代码不要用HibernateTemplate,这个东东过时了,连Spring的参考手册都不推荐使用它。
    Hibernate的Query对象完全可以解决你的问题。
    Query query = session.createQuery("from Table where id in (:idList)");
    query.setParameterList("idList", new int[] { 1, 2, 3 });
      

  5.   


    query.setParameterList("idList",newint[] {1,2,3 });编译报错,没有setParameterList(String,int[])这个方法
      

  6.   

    OK,解决,编译报错是因为int[]不属于Object[],换成Integer[]就行了,3q大家!
      

  7.   


    该成new Integer[] { 1, 2, 3 }