Soy nuevo en Hibernación. antes estoy tratando de utilizar la siguiente consulta

 this.getHibernateTemplate()
      find("select distinct ci.customer " +
             "from CustomerInvoice ci " +
              "where ci.name = ? and ci.id in ? ",name,ids);

Donde id es la lista de id.Es tirar classCastException. Alguien me puede decir la solución con razón

Excepción:

java.lang.ClassCastException: [Ljava.lang.String; cannot be cast to java.lang.String
at org.hibernate.type.descriptor.java.StringTypeDescriptor.unwrap(StringTypeDescriptor.java:40)
at org.hibernate.type.descriptor.sql.VarcharTypeDescriptor$1.doBind(VarcharTypeDescriptor.java:52)
at org.hibernate.type.descriptor.sql.BasicBinder.bind(BasicBinder.java:91)
at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:283)
at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:278)
at org.hibernate.param.PositionalParameterSpecification.bind(PositionalParameterSpecification.java:68)
at org.hibernate.loader.hql.QueryLoader.bindParameterValues(QueryLoader.java:578)
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1716)
at org.hibernate.loader.Loader.doQuery(Loader.java:801)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274)
at org.hibernate.loader.Loader.doList(Loader.java:2542)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276)
at org.hibernate.loader.Loader.list(Loader.java:2271)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:459)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:365)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1268)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
at org.springframework.orm.hibernate3.HibernateTemplate$30.doInHibernate(HibernateTemplate.java:921)
at org.springframework.orm.hibernate3.HibernateTemplate$30.doInHibernate(HibernateTemplate.java:1)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:406)
at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
at org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:912) 
  • Siempre pegado el seguimiento completo de la pila de la excepción que usted consigue. Es de gran ayuda. Además, no debe haber ningún paréntesis alrededor de la ?.
  • Gracias, he corregido los errores.
  • Mi conjetura es esfuerzo de romper la derecha el nombre de argumento es una matriz de cadenas, y no una Cadena. Nos muestran cómo las variables id y el nombre están declarados.
  • Estos dos parámetros se pasan como parámetros del método public void getAllowedCustomer(String nombre, la Lista de<Cadena> ids);
InformationsquelleAutor Minion | 2014-05-22

2 Comentarios

  1. 1

    Intente esto:

    List customers = getHibernateTemplate().executeFind(new HibernateCallback<List>() {
    @Override
    public List doInHibernate(Session session) throws HibernateException, SQLException {
    Query query = session.createQuery(
    "select distinct ci.customer " +
    "from CustomerInvoice ci " +
    "where ci.name = :name and ci.id in (:ids) "
    );
    query.setParameter("name", name);
    query.setParameterList("ids", ids);
    return query.list();
    }
    });
    1. Primero de todo, creo que usted necesita para envolver el parámetro de consulta (…)
    2. Puedes probar con el método find (), pero si que no sabe cómo aplicar la lista de tipo de parámetro, puede recurrir al establecer explícitamente con «setParameterList» como en mi ejemplo.
    • Esto funcionó para mí. Gracias 🙂
  2. 0

    Probar Esta su error será resuelto:

    this.getHibernateTemplate()
    find("select distinct ci.customer " +
    "from CustomerInvoice ci " +
    "where ci.name = ? and ci.id in ?",new Object[]{name,ids});

Dejar respuesta

Please enter your comment!
Please enter your name here