Frage

Wie kann ich IN an meinem 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)")),  
 }

Ich meine, dass ich einstellen ‚Typ‘ Parameter (I definiert es als eine Variable ---->: Typ) und ich möchte Variablen innerhalb von IN-Anweisung definieren. Jedoch ist die Anzahl der Parameter nicht konstant sind. Ich möchte ein Array oder etwas ähnliches definieren. Array [] und ich möchte es setzen, wenn das nenne ich namedQuery

War es hilfreich?

Lösung

NamedQuery

@NamedQueries(  
{   
 @NamedQuery(name = "GetAvailableProducts", query = "FROM Product p WHERE p.type= :type AND (p.available IN (:availableCollection) OR p.available = :available)",  
}

Parameter einstellen

Hibernate :

query.setParameterList('availableCollection', yourCollection);

JPA :

query.setParameter('availableCollection', yourCollection);

Andere Tipps

Haben Sie versucht, so etwas wie

SELECT   p   FROM Product p WHERE p.type= :type AND (p.available IN 
('foo', 'bar') OR p.available = :available)

(falls "verfügbar" ist eine Zeichenfolge)

oder

SELECT   p   FROM Product p WHERE p.type= :type AND (p.available IN 
(1, 2, 3) OR p.available = :available)

(falls vorhanden eine Zahl ist)?

Expression 'IN' in JPQL gleich schreibt mehrere 'OR' Aussagen, in Ihrem Fall ein Beispiel für 'IN' wäre:

... p.available IN ('US', 'GB') ...

Was ich glaube, ist gleich:

... p.available = 'US' OR p.available = 'GB' ...

Hier ist ein Link, der es gut erklärt: OpenJPA: IN Expression

Bearbeiten P. S. Unter der Annahme, p.available wird String (Zeichentyp)

EDIT2 Der Autor Frage so oft bearbeitet hat, dass ich nicht folgen kann ihn :) Was die eigentliche Frage zu Array vorbei für IN-Ausdruck, hier ist ein Link ähnlicher Frage auf Stackoverflow: JPQL iN-Klausel - Arrays

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top