Hibernate查询有关 in 的查询问题

[code="java"]public List getDocumentsByIds(final String ids){
List documents=getHibernateTemplate().executeFind(new HibernateCallback(){
public Object doInHibernate(Session session) throws HibernateException,SQLException {
StringBuffer sql=new StringBuffer("from Document doc where doc.id in(?)");
Query query=session.createQuery(sql.toString());
query.setString(0,ids);
return query.list();
}
});
if(documents!=null&&documents.size()>0){
return documents;
}
return null;
}[/code]

如上的代码,为什么我传递参数 "3,4,5",却只能查询出第一个3的对象,后面两个相应的对象为什么查询不出来,数据库都有记录存在的!
求解释 :cry:

你用的是HQL语句,不是SQL。

使用HQL的in语句时,传出的是集合或者数组。因此你需要使用以下方式:

List ids = new ArrayList();
ids.add(3);
ids.add(4);
ids.add(5);
Query query=session.createQuery(from document where id in (:ids));

query.setParameterList("ids", ids);
query.list();

如果你不想改动你的方法名,并且使用你的上述方法,那么你需要将
session.createQuery改成session.createSQLQuery。此时不能使用query.setString方法。你只能使用字符串拼接了。

[code="java"]
List ids= new ArrayList();
ids.add()........

[/code]

你的id是什么类型的,是number类型还是varchar类型的,如果是varchar类型的应该传的参数为"'3','4','5'"。