2016-06-20 9 views
0

Ich habe ein Unternehmen mit einem Map<String,string> von specifications holen:Benutzerdefinierte Frühling JPA-Abfrage eine Karte

class Product { 
    Map<String, String> specifications; 
} 

Ich habe eine benutzerdefinierte Abfrage mit 2 Parametern (Schlüssel, Wert) erstellen, die alle Produkte holen, wo Spezifikationen mit Schlüssel gleich einem Wert.

Zum Beispiel fetch Produkte mit roter Farbe (Pseudocode):

Schleife durch Produkte;
Produkt holen;
Join Spezifikationen;
Wert mit Schlüssel 'Farbe' erhalten und mit gegebenem Wert 'rot' vergleichen; zur Ausgabe hinzufügen wenn wahr; nächstes Produkt;

habe ich versucht, diese Anfrage:

@Query("SELECT p FROM Products p LEFT JOIN FETCH p.specifications, p.reviews WHERE p.specifications.?1 = ?2") 

Aber offensichtlich ist es nicht funktioniert.

+0

"es nicht funktioniert". "offensichtlich". Du erzählst uns wirklich viel. "d.spezifikationen.?1" ist eindeutig JPQL ungültig. –

Antwort

2

Eine Arbeitslösung ist wie folgt:

SELECT p FROM Product p LEFT JOIN p.specifications, p.reviews m 
where (KEY(m) = :1 and :2 in (VALUE(m))) 
Verwandte Themen