Настройка параметров гибернации в именованном запросе - PullRequest
2 голосов
/ 27 января 2012

Я пытаюсь написать универсальный метод, который может подобрать именованный запрос, установить в нем названные параметры и вернуть результат.

Метод выглядит следующим образом:

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, поэтому мне пришлось выбрать эту опцию.Любая помощь будет принята с благодарностью.Спасибо!

Ответы [ 3 ]

3 голосов
/ 27 января 2012

Если я правильно понимаю ваш вопрос.

В моем случае я часто использую q.getResultList, чтобы получить коллекцию результата.
Думаю, это может помочь вам найти решение.

2 голосов
/ 27 января 2012

Вам нужно использовать setParameterList (ключ, значение), где vale - ваш список.

1 голос
/ 24 октября 2013

Я подозреваю, что ответом на ваш вопрос является, во-первых, использование метода 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...