hql in 的问题

alpha_423 2009-08-07 09:10:54
数据库是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可以查出数据的
...全文
2691 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
kun20031029 2010-08-13
  • 打赏
  • 举报
回复
好,六个记号
ThirstyCrow 2009-08-07
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 alpha_423 的回复:]
query.setParameterList("idList",newint[] {1,2,3 });编译报错,没有setParameterList(String,int[])这个方法
[/Quote]

该成new Integer[] { 1, 2, 3 }
alpha_423 2009-08-07
  • 打赏
  • 举报
回复
OK,解决,编译报错是因为int[]不属于Object[],换成Integer[]就行了,3q大家!
believefym 2009-08-07
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 alpha_423 的回复:]
引用 6 楼 thirstycrow 的回复:
新写的代码不要用HibernateTemplate,这个东东过时了,连Spring的参考手册都不推荐使用它。
Hibernate的Query对象完全可以解决你的问题。
Java codeQuery query= session.createQuery("from Table where id in (:idList)");
query.setParameterList("idList",newint[] {1,2,3 });


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

传个List进去
alpha_423 2009-08-07
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 thirstycrow 的回复:]
新写的代码不要用HibernateTemplate,这个东东过时了,连Spring的参考手册都不推荐使用它。
Hibernate的Query对象完全可以解决你的问题。
Java codeQuery query= session.createQuery("from Table where id in (:idList)");
query.setParameterList("idList",newint[] {1,2,3 });
[/Quote]

query.setParameterList("idList",newint[] {1,2,3 });编译报错,没有setParameterList(String,int[])这个方法
ThirstyCrow 2009-08-07
  • 打赏
  • 举报
回复
新写的代码不要用HibernateTemplate,这个东东过时了,连Spring的参考手册都不推荐使用它。
Hibernate的Query对象完全可以解决你的问题。
Query query = session.createQuery("from Table where id in (:idList)");
query.setParameterList("idList", new int[] { 1, 2, 3 });
alpha_423 2009-08-07
  • 打赏
  • 举报
回复
用这样可以实现,不过没有智能一点的方法了吗?

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());
}
ty_fzpb 2009-08-07
  • 打赏
  • 举报
回复
根据ID个数拼串啊

肯定知道具体某次调用时的ID个数吧 用循环拼串那么多个?
紫炎圣骑 2009-08-07
  • 打赏
  • 举报
回复
那只能每次都判断id的个数

然后拼?号了
alpha_423 2009-08-07
  • 打赏
  • 举报
回复
id个数不确定。。。
ty_fzpb 2009-08-07
  • 打赏
  • 举报
回复
多用两个占位符?,? from Table where id in (?,?,?)

67,517

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧