Puede alguien sugerir la sintaxis correcta de una cláusula where utilizando in
aplicada a una lista? La consulta siguiente en una .hbm archivo genera un parse
excepción:

<query name="Nutrient.findNutrients1">
    <![CDATA[from Nutrient as nutrient where nutrient.id in elements(?)]]>
</query>

La excepción de la siguiente manera:

ANALIZADOR.reportError(56) | línea 2:95:
esperando IDENT, se encuentra ‘?’
SessionFactoryImpl.(395) | Error
en nombre de la consulta:
De nutrientes.findNutrients1
org.hibernate.hql.ast.QuerySyntaxException:
esperando IDENT, se encuentra ‘?’ cerca de la línea
2, columna 95 [ de Nutrientes como la
nutrientes donde los nutrientes.id en
elementos(?)

InformationsquelleAutor G__ | 2010-10-10

1 Comentario

  1. 4

    Quitar el elements parte de su consulta:

    <query name="Nutrient.findNutrients1">
        <![CDATA[from Nutrient as nutrient where nutrient.id in (:ids)]]>
    </query>

    Y llámalo como este:

    List<Long> vals = Arrays.asList(1L, 2L);
    
    Query q = session.getNamedQuery("Nutrient.findNutrients1");
    q.setParameterList("ids", vals);
    List<Nutrient> result = q.list();
    • Gracias por este. Sin embargo, no estoy seguro de cómo utilizar los parámetros con nombre en una consulta definida en una .hbm archivo – yo pensaba que usted necesita para hacerlo a través de la sesión… ¿sabes si se puede hacer a través de .hbm?
    • Puede utilizar cualquiera de posición o parámetros con nombre en consultas con nombre. Pero esa no es la parte importante de todos modos. Me lo puede quitar si se prefiere 🙂
    • En lugar de quitar, ¿te importaría añadir un poco para mostrar cómo pasar en el nombre del parámetro en este contexto?
    • Yo debería haber hecho eso en mi respuesta inicial. Ver mis actualizaciones.
    • Siento ser necesitados aquí, pero también muestran una versión de la consulta que utiliza los parámetros de posición? (Estoy seguro de que estoy haciendo algo tonto, pero no de análisis como esperaba)
    • En realidad, no hay ninguna Query#setParameterList(int, Collection), usted tendrá que usar un nombre de parámetro.
    • Por CIERTO, he probado esta, funciona muy bien para mí.

Dejar respuesta

Please enter your comment!
Please enter your name here