0 0

Hibernate查询有关 in 的查询问题3

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 写道
List<String> ids= new ArrayList<String>();
ids.add()........



什么意思啊?
2011年11月11日 12:47

3个答案 按时间排序 按投票排序

0 0

采纳的答案

你用的是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方法。你只能使用字符串拼接了。

2011年11月14日 11:11
0 0

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

2011年11月14日 16:01
0 0

List<String> ids= new ArrayList<String>();
ids.add()........

2011年11月11日 13:10

相关推荐

Global site tag (gtag.js) - Google Analytics