我正在尝试编写一个可以获取命名查询的通用方法,在其中设置命名参数并返回结果。
该方法如下所示,
s = getSession();
q = s.getNamedQuery(nameOfTheQuery);
keySet = queryParams.keySet();
itr = keySet.iterator();
while(itr.hasNext()){
key = itr.next();
//Problem here
q.setParameter(key, queryParams.get(key));
}
q.setMaxResults(maxResults);
q.setFetchSize(fetchSize);
log.info("::>>>> Query result :"+(q.uniqueResult()));
我正在尝试将命名参数设置为值。但是当参数恰好是列表或集合时,ClassCastException
q.uniqueResult()
有没有办法可以编写这个方法来支持集合和其他类型的参数?我必须设置maxResults和fetchSize,因此我必须选择此选项。任何帮助将不胜感激。谢谢!
答案 0 :(得分:3)
如果我理解你的问题。
在我的情况下,我经常使用q.getResultList来获取结果的集合 我认为这可以帮助您找到解决方案。
答案 1 :(得分:2)
你需要使用setParameterList(key,value),其中vale是你的列表。
答案 2 :(得分:1)
我怀疑你的问题的答案首先是在参数是列表类型时使用setParameterList
方法;其次,使用以下技术之一:
使用反射来查询参数的类型,然后相应地使用setParameter或setParameterList方法。
使用多态的好处来捕获作为List对象的参数,并为这些参数调用setParameterList。示例如下。*
制作一个大的条件块,测试转换为一堆列表类型,如果它转换,则调用setParameterList,否则调用setParameter。
(*)方法2的例子。
while(itr.hasNext())
{
key = itr.next();
QueryParameterHelper.setGenericParameter(q, key, queryParams.get(key));
}
public static class QueryParameterHelper
{
public static void setGenericParameter(Query query, String paramName, List listValue)
{
query.setParameterList(paramName, listValue);
}
public static void setGenericParameter(Query query, String paramName, String stringValue)
{
query.setParameter(paramName, stringValue);
}
//etc for other possible parameter types
}