Puis-je utiliser la déclaration de SQL IN (...) pour une namedQuery?
-
11-10-2019 - |
Question
Comment puis-je utiliser mon 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)")),
}
Je veux dire que je peux paramètre « type » set (je l'ai défini comme une variable ---->: type) et je veux définir des variables à l'intérieur de la déclaration à. Cependant, le nombre de paramètres ne sont pas constants. Je veux définir un tableau ou quelque chose comme ça:. Array [] et je veux le mettre quand je l'appelle que namedQuery
La solution
NamedQuery
@NamedQueries(
{
@NamedQuery(name = "GetAvailableProducts", query = "FROM Product p WHERE p.type= :type AND (p.available IN (:availableCollection) OR p.available = :available)",
}
Régler les paramètres
Mise en veille prolongée :
query.setParameterList('availableCollection', yourCollection);
JPA :
query.setParameter('availableCollection', yourCollection);
Autres conseils
Avez-vous essayé quelque chose comme
SELECT p FROM Product p WHERE p.type= :type AND (p.available IN
('foo', 'bar') OR p.available = :available)
(si "disponible" est une chaîne)
ou
SELECT p FROM Product p WHERE p.type= :type AND (p.available IN
(1, 2, 3) OR p.available = :available)
(si disponible est un nombre)?
L'expression 'IN' dans JPQL est égal à écrire plusieurs déclarations 'OR', dans votre cas un exemple de 'IN' serait:
... p.available IN ('US', 'GB') ...
Ce que je crois est égal à:
... p.available = 'US' OR p.available = 'GB' ...
Voici un lien qui explique bien: OpenJPA: dans l'expression
EDIT Post-scriptum Si l'on suppose p.available est une chaîne (type de caractère)
EDIT2 L'auteur a édité question tant de fois que je ne peux pas suivre en lui :) Quant à la question réelle sur tableau de passage pour IN-expression, voici un lien de question similaire sur StackOverflow: JPQL clause IN - tableaux