【问题标题】:Exception while passing a list to javax.persistent.query object将列表传递给 javax.persistent.query 对象时出现异常
【发布时间】:2014-07-19 01:10:14
【问题描述】:

我有疑问

"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)";

我正在传递参数,例如

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

但是我遇到了异常

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)

【问题讨论】:

  • 您使用本机查询而不是可能支持接受参数集合的 JPQL 查询的任何原因?

标签: sql oracle hibernate jpa


【解决方案1】:

这是我的问题。我错误地在查询对象中设置了一些额外的参数。删除列表后工作正常。感谢您的所有建议

【讨论】:

    【解决方案2】:

    如果您使用 Hibernate 而不是其他 JPA 实现:

    您可以从 entityManager 获取 Hibernate Session:

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

    然后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();
    

    【讨论】:

      【解决方案3】:

      本机查询无法识别命名参数。请看下面的链接似乎类似的问题:JPA/Hibernate Native Queries do not recognize Parameters

      尝试: "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);
      

      【讨论】:

        猜你喜欢
        • 2012-06-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-28
        • 1970-01-01
        • 2015-06-21
        • 1970-01-01
        相关资源
        最近更新 更多