簡體   English   中英

命名查詢中的休眠設置參數

[英]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()));

我正在嘗試將命名參數設置為此處的值。 但是當這里的參數恰好是列表或集合時,我會收到一個ClassCastExceptionq.uniqueResult()

有沒有一種方法可以編寫此方法來支持集合和其他類型的參數? 我必須設置maxResults和fetchSize,因此必須選擇此選項。 任何幫助將不勝感激。 謝謝!

如果我正確理解您的問題。

就我而言,我經常使用q.getResultList來獲取結果的集合。
我認為這可以幫助您找到解決方案。

您需要使用setParameterList(key,value),其中vale是您的列表。

我懷疑您的問題的答案是,當參數為列表類型時,首先使用setParameterList方法。 其次,使用以下技術之一:

  1. 使用反射來詢問參數的類型,然后相應地使用setParameter或setParameterList方法。

  2. 利用多態的好處來捕獲作為List對象的參數,並為其調用setParameterList。 下面的示例。*

  3. 制作一個大的條件塊來測試是否轉換為一堆列表類型,如果轉換,則調用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM