[英]Hibernate setting parameters in named query
我正在嘗試編寫一個通用方法,該方法可以提取命名查詢,在其中設置命名參數並返回結果。
該方法如下所示:
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,因此必須選擇此選項。 任何幫助將不勝感激。 謝謝!
如果我正確理解您的問題。
就我而言,我經常使用q.getResultList來獲取結果的集合。
我認為這可以幫助您找到解決方案。
您需要使用setParameterList(key,value),其中vale是您的列表。
我懷疑您的問題的答案是,當參數為列表類型時,首先使用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
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.