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

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top