2016-07-15 24 views
0

Ich habe die folgende JPQL-Struktur mit dem SOUNDEX-Ausdruck, um phonetische Rechtschreibprüfung durchzuführen.SOUNDEX arbeitet nicht mit JPA mit JPQL

aber während der createQuery gibt es mir den folgenden Fehler .. Bitte lassen Sie mich wissen, wenn etwas ist, das ich hier falsch mache. Wenn die SOUNDEX mit UPPER es funktioniert gut. Außerdem habe ich die Abfrage ausgeführt, die Datenbankergebnisse normalerweise abrufen.

SystemErr R optimum.clinicals.waf.GeneralFailureException: org.apache.openjpa.persistence.ArgumentException: "Encountered "SOUNDEX (" at Zeichen 68, aber erwartet: [" (“, ")" , "*", "+", "-", ".", "/", ":", "<", "< =", "<>", "=", ">", "> = ","? "," ABS "," ALLE ", " UND "," ANY "," AS "," ASC "," AVG "," BETWEEN "," BEIDE "," BY "," CONCAT COUNT, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, DELETE, DESC, DISTINCT, EMPTY, ESCAPE, EXISTS, FETCH, Von "," GROUP "," HAVING "," IN "INDEX", "INNER", "IS", "JOIN", "SCHLÜSSEL", "LEADING", "LINKS", "LÄNGE", "WIE", "LOCATE", "LOWER", "MAX" , "MITGLIED", "MIN", "MOD", "NEU", "NICHT", "NULL", "OBJEKT", "VON", "ODER", "ORDER", "OUTER", "SELECT" , "SET", "GRÖSSE", "EINIGE", "SQRT", "SUBSTRING", "SUMME", "TRAILING", "TRIM", "TYPE", "UPDATE", "UPPER", "VALUE" "Where",,, ,,,, ,,]. "Während der Analyse JPQL" SELECT i FROM Informationsquelle i WHERE i.id.Companynummer =? 1 AND (SOUNDEX (i.id.sourcecode) WIE? 2 ODER SOUNDEX (i.Quellbeschreibung) LIKE? 2 ORDER BY i.id.sourcecode ". Siehe verschachtelte Stack-Trace für ursprünglichen Parsing-Fehler .

Antwort

0

Wie die Nachricht sagt genug SOUNDEX ist kein gültiges JPQL Schlüsselwort/Funktion. Wenn Sie wirklich proprietäre SQL Funktionen aufrufen müssen, verwenden Sie das Schlüsselwort FUNCTION (bei Verwendung von JPA 2.1). Besser wäre es noch, some JPQL documentation zu lesen, bevor Sie einfach alles SQL in eine JPQL-Abfrage schreiben. JPQL! = SQL.

0

Schauen Sie sich Apache Commons Metaphone utils. Diese Dienstprogrammklassen transformieren einen String in seiner soundex-Variante, so dass Sie JPQL nicht nach diesem Vorgang fragen müssen, es ist nicht gut, proprietäre Funktionen über JPA zu verwenden.