问题描述
public List<Document> getDocumentsByIds(final String ids){List<Document> 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;}如上的代码,为什么我传递参数 "3,4,5",却只能查询出第一个3的对象,后面两个相应的对象为什么查询不出来,数据库都有记录存在的! 求解释 问题补充:visoin 写道
解决方案
你用的是HQL语句,不是SQL。使用HQL的in语句时,传出的是集合或者数组。因此你需要使用以下方式:List<Integer> ids = new ArrayList<Integer>();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方法。你只能使用字符串拼接了。
解决方案二:
你的id是什么类型的,是number类型还是varchar类型的,如果是varchar类型的应该传的参数为"'3','4','5'"。
解决方案三:
List<String> ids= new ArrayList<String>();ids.add()........