Kann ich SQLs IN (...) Anweisung für eine namedQuery verwenden?
-
11-10-2019 - |
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
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