Puedo utilizar en (...) la declaración de SQL para una namedQuery?
-
11-10-2019 - |
Pregunta
¿Cómo puedo utilizar en mi namedQuery?
@NamedQueries(
{
@NamedQuery(name = "GetAvailableProducts", query = new StringBuilder("").append("SELECT p FROM Product p WHERE p.type= :type AND (p.available IN ('I want to define changeable size of an array or sometinhg like that') OR p.available = :available)")),
}
Me refiero a que puedo ajustar el parámetro 'tipo' (la he definido como una variable ---->: Tipo) y quiero definir variables dentro de IN declaración a. Sin embargo el número de parámetros no son constantes. Quiero definir una matriz o algo por el estilo:. Array [] y quiero configurarlo cuando llamo que namedQuery
Solución
NamedQuery
@NamedQueries(
{
@NamedQuery(name = "GetAvailableProducts", query = "FROM Product p WHERE p.type= :type AND (p.available IN (:availableCollection) OR p.available = :available)",
}
Establecer parámetros
Hibernate
query.setParameterList('availableCollection', yourCollection);
APP
query.setParameter('availableCollection', yourCollection);
Otros consejos
¿Usted intentó algo así como
SELECT p FROM Product p WHERE p.type= :type AND (p.available IN
('foo', 'bar') OR p.available = :available)
(si es "disponible" es una cadena)
o
SELECT p FROM Product p WHERE p.type= :type AND (p.available IN
(1, 2, 3) OR p.available = :available)
(si está disponible es un número)?
La expresión '' en JPQL es igual a la escritura múltiple 'O' declaraciones, en su caso, un ejemplo de 'IN' sería la siguiente:
... p.available IN ('US', 'GB') ...
Lo que yo creo es igual a:
... p.available = 'US' OR p.available = 'GB' ...
Aquí hay un enlace que lo explica así: OpenJPA: en la expresión
Editar PD Suponiendo p.available se String (tipo de caracteres)
Edit2 El autor ha editado pregunta tantas veces que no puedo seguir él :) En cuanto a la pregunta real acerca de pasar matriz para IN-expresión, aquí hay un enlace de pregunta similar en StackOverflow: cláusula JPQL eN - matrices