Параметр не существует как именованный параметр

#java #hibernate

#java #впасть в спящий режим

Вопрос:

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

 Query query1 = session.createQuery("select c.email from Contact c where c.contactNo =:contactNo");
    query1.setInteger("contactNo", 22);
 

Ошибка, которую я получил, такова:

Исключение в потоке «main» java.lang.Исключение IllegalArgumentException: Параметр contactNo не существует как именованный параметр в [выберите c.email из Contact c, где c.contactNo = ?]

Он прекрасно работает с

 Query query = session.createQuery("select c.email from Contact c where c.contactNo = ?");
    query.setInteger(0, 22);
 

Почему 1-й запрос не работает?

Ответ №1:

 Query query1 = session.createQuery("select c.email from Contact c where c.contactNo =:contactNo");
query.setParameter("contactNo", 22);
 

попробуйте использовать setParameter вместо setInteger

Комментарии:

1. Добро пожаловать в SO! Без какого-либо текста подобные ответы отображаются в очереди проверки низкого качества. Это означает, что существует риск, что ваш ответ будет удален так называемыми роботами-рецензентами. Я ничего не знаю об этой теме, поэтому я не могу точно сказать, низкое это качество или нет, но я предлагаю вам добавить небольшой абзац, в котором указано, что отличается от вашего кода и сообщения OP. Желательно с объяснением, почему это работает, а другое нет.

Ответ №2:

Я думаю, вам может понадобиться пробел перед вашим параметром:

 Query query1 = session.createQuery("select c.email from Contact c where c.contactNo = :contactNo");
query.setInteger("contactNo", 22);
 

Ответ №3:

   Just Try this 


    **Step 1--:** Add How many parameter you need just add in hashmap
   -------------------------------------------------------------------
    
    HashMap param_List=new HashMap();
    param_List.put("contactNo",22);

    
    **Step 2--:** Just You pass your Query
   -------------------------------------------------------------------
    
    Query query1 = session.createQuery("select c.email from Contact c where c.contactNo =:contactNo");


  **Step 3--:** What ever Data type is no matters but get an output.
  -------------------------------------------------------------------

    for(Object paramKey : param_List.keySet())
    {
    query1.setParameter(paramkey.toString(), param_List.get(paramKey);
    }


 **Step 4--:**
-------------------------------------------------------------------
    String finalResult=query1.getSingleResult().toString();