hibernate ,spring getHibernateTemplate().find() 传参数

大家好,我项目采用spring2.X hibernate 3 ,遇到这样一个问题就是,请大家帮助解决一下:

String sql = "FROM DPourRecord WHERE wheel_code in (?) ",我打算向这个? 传递的是一个数组,
我是这样写的,
public List findWheelsFromPourRecordByWHeelCodes(String[] wheelCodes){
log.debug("find wheels by wheelCodes! ");
List list = null;
String sql = " FROM DPourRecord WHERE wheel_code in (?)";
List paramsList = new ArrayList();
paramsList.add(wheelCodes);
try {
list = getHibernateTemplate().find(hql,paramsList.toArray());
} catch (RuntimeException e) {
e.printStackTrace();
log.error("find wheels by wheelcodes is failed!");
}
return list;
}
}

可是执行不能通过,有清楚的,请详细给描述一下解决的方法,谢谢各位了!

Criteria.add(Restrictions.in("wheel_code", paramsList));
Criteria.list();
试试这种形式!

1.对于HQL来说,貌似没什么好办法来实现从数组填充到in语句中去。
将List循环,并在HQL中设置n个问号,再一一对应地填充吧。
2.对于从数组中取数据填充到in语句的做法强烈不建议,因为会严重影响查询效率。如果in中的个数不定的话,数据库无法做出准确的解析,会带来性能问题。

首先,你有个错误!!(不过影响不大)

你声明的是String[color=red] sql [/color]= "***" ;

使用的时候却是getHibernateTemplate().find([color=red]hql[/color],***);

我估计是敲错了,编译都过了,说明eclipse里没敲错,呵呵!

这种使用方法是错误的,你在hql中只声明了一个可变参数(即一个问号),

但是传进去的却是一堆(多个值),你说能行么? :P

我认为可行的解决办法:

[color=blue]hql语句不变,仍然声明一个?,传的参数也是一个,不过要处理下

假如数组是 String[] ids = {"12","20","100"} ;

那么我传的参数是 String idIn = "12,20,100" ;

这个字符串可以用自己写的方法来实现,很好写的,我就不贴出来了

修改后的代码是:

String hql = "FROM DPourRecord WHERE wheel_code in (?)" ;
List list = getHibernateTemplate().find(hql,inId);[/color]

刚才没仔细看,我又看了看,发现你这个问题不少啊。。。。。。

List paramsList = new ArrayList();

list里装的是数组???,然后又list.toArray();

你想干什么,不就传个字符串么,整这么恐怖 :x

你知不知道toArray()返回的是什么啊,你看看吧。。。。。。