0

I have query

"SELECT I.INDIVIDUAL_CASE_ID,D.ASSISTER_ID,I.FIRSTNAME,I.LASTNAME,D.LAST_UPDATE_TIMESTAMP,I.ELIGIBILITY_STATUS,I.INDIVIDUAL_CASE_ID," +
               "I.NUMBEROFHOUSEHOLDMEMBERS,I.HOUSEHOLD_INCOME FROM  EXTERNAL_INDIVIDUAL I, EE_DESIGNATE_ASSISTERS D " +
               "WHERE I.INDIVIDUAL_CASE_ID = D.INDIVIDUAL_ID AND D.ASSISTER_ID=:assisterId AND D.INDIVIDUAL_ID IN (:individualIds)";

I am passing the parameter like

query = em.createNativeQuery(queryStr);
query.setParameter("assisterId", assisterId);
query.setParameter("individualIds",indvIdList);

But I am getting exception as

SEVERE: Servlet.service() for servlet [appServlet] in context with path [/ghix-entity] threw exception [Request processing failed; nested exception is
java.lang.IllegalArgumentException: org.hibernate.QueryParameterException: could not locate named parameter [individualIds]] with root cause
org.hibernate.QueryParameterException: could not locate named parameter [individualIds]
    at org.hibernate.engine.query.ParameterMetadata.getNamedParameterDescriptor(ParameterMetadata.java:101)
Emmanuel
  • 13,935
  • 12
  • 50
  • 72
Programmer
  • 713
  • 1
  • 8
  • 23
  • 1
    Any reason you are using a native query instead of a JPQL query which might support accepting a collection of parameters? – Chris May 29 '14 at 15:07

3 Answers3

1

Native queries do not recognize Named parameters. Please see below link seems like similar question: JPA/Hibernate Native Queries do not recognize Parameters

Try : "SELECT I.INDIVIDUAL_CASE_ID,D.ASSISTER_ID,I.FIRSTNAME,I.LASTNAME,D.LAST_UPDATE_TIMESTAM‌​P,I.ELIGIBILITY_STATUS,I.INDIVIDUAL_CASE_ID," + "I.NUMBEROFHOUSEHOLDMEMBERS,I.HOUSEHOLD_INCOME FROM EXTERNAL_INDIVIDUAL I, EE_DESIGNATE_ASSISTERS D " + "WHERE I.INDIVIDUAL_CASE_ID = D.INDIVIDUAL_ID AND D.ASSISTER_ID=?1 AND D.INDIVIDUAL_ID IN (?2)";

query = em.createNativeQuery(queryStr); 
query.setParameter(1, assisterId); 
query.setParameter(2,indvIdList);
Community
  • 1
  • 1
Gayathri
  • 894
  • 6
  • 19
0

If you use Hibernate and not other JPA implementation than:

You can obtain the Hibernate Session from the entityManager:

Session session = entityManager.unwrap(Session.class);

And then you can use named parameters:

List result = 
    session.createSQLQuery(
            "SELECT I.INDIVIDUAL_CASE_ID,D.ASSISTER_ID,I.FIRSTNAME,I.LASTNAME,D.LAST_UPDATE_TIMESTAMP,I.ELIGIBILITY_STATUS,I.INDIVIDUAL_CASE_ID," +
                    "I.NUMBEROFHOUSEHOLDMEMBERS,I.HOUSEHOLD_INCOME FROM  EXTERNAL_INDIVIDUAL I, EE_DESIGNATE_ASSISTERS D " +
                    "WHERE I.INDIVIDUAL_CASE_ID = D.INDIVIDUAL_ID AND D.ASSISTER_ID=:assisterId AND D.INDIVIDUAL_ID IN (:individualIds)"
    )
    .setLong("assisterId", assisterId)
    .setParameterList("individualIds", indvIdList)
    .list();
Vlad Mihalcea
  • 142,745
  • 71
  • 566
  • 911
0

It was my issue. I was setting some extra parameters in the query object by mistake.After removing that the list is working fine.Thanks for all your suggestion

Programmer
  • 713
  • 1
  • 8
  • 23