query example sql orm jpa jpql named-query

sql - example - Cláusula JPQL IN: Java-Arrays(o Lists, Sets...)?



jpql query (2)

El límite del oráculo es 1000 parámetros. El problema se ha resuelto por hibernación en la versión 4.1.7 aunque al dividir la lista de parámetros pasados ​​en conjuntos de 500, consulte JIRA HHH-1123.

Me gustaría cargar todos los objetos que tienen un conjunto de etiquetas de texto a cualquiera de un número pequeño pero arbitrario de valores de nuestra base de datos. La forma lógica de hacerlo en SQL sería construir una cláusula "IN". JPQL permite IN, pero parece requerirme que especifique cada parámetro en IN directamente (como en, "in (: in1,: in2,: in3)").

¿Hay alguna manera de especificar una matriz, o una lista (o algún otro contenedor) que deba desenrollarse a los valores de una cláusula IN?


No estoy seguro de JPA 1.0, pero puede pasar una Collection en JPA 2.0:

String qlString = "select item from Item item where item.name IN :names"; Query q = em.createQuery(qlString, Item.class); List<String> names = Arrays.asList("foo", "bar"); q.setParameter("names", names); List<Item> actual = q.getResultList(); assertNotNull(actual); assertEquals(2, actual.size());

Probado con EclipseLInk. Con Hibernate 3.5.1, deberá rodear el parámetro con paréntesis:

String qlString = "select item from Item item where item.name IN (:names)";

Pero esto es un error, la consulta JPQL en la muestra anterior es válida para JPQL. Ver HHH-5126 .