2016-05-04 7 views
0

Ich habe ein Problem mit dieser Abfrage bei der Ausführung wie folgtFehler bei einem Update JPA Query-

Query query = em.createQuery("UPDATE Equipo c JOIN c.histAsociados e SET e.horasTrabajadas = (CAST(c.horastd AS DECIMAL(18,2)) - (c.horastotales AS DECIMAL(18,2))) WHERE c.id=" + equipo.getId()); 

dies die Ausnahme ist, die ausgelöst wird, wenn

The SET identifier is missing from the UPDATE clause. [39, 39] The equal sign must be specified.[16, 38] The expression is invalid, which means it does not follow the JPQL grammar.[40, 43] The identification variable 'SET' cannot be a reserved word.[115, 115] The right parenthesis is missing from the sub-expression.[115, 115] The right parenthesis is missing from the sub-expression.[116, 126] The expression is invalid, which means it does not follow the JPQL grammar.[133, 151] The query contains a malformed ending. 
+0

Lesen Sie die JPA-Spezifikation auf JPQL-Syntax. Dein ist falsch, wie die Botschaft sagt. JPQL! = SQL –

Antwort

0

Versuchen Sie so etwas wie dieses einsetzen, setzen in einer Unterabfrage, dass histAsociados unter der Annahme ist eine Einheit innerhalb Equipo Einheit:

Query query = em.createQuery("UPDATE Equipo c SET c.histAsociados WHERE c.histAsociados.id in(select Equipo.id from Equipo c1 LEFT JOIN c1.histAsociados e WHERE e.horasTrabajadas = (CAST(c1.horastd AS DECIMAL(18,2)) - (c1.horastotales AS DECIMAL(18,2))) AND c1.histAsociados.id = e.id) AND c.id=:id).setParameter("id", equipo.getId()) 

auch könnten Sie bitte versuchen Sie es die Attribute von Entitäten mit einfachen Namen versehen. Das erhöht die Lesbarkeit.

+0

hallo danke für die Hilfe ich schreibe diese Abfrage so Start Fehler. – alexander

+0

Hallo Freund Ich versuche Ihre Anfrage und starten Sie diesen Fehler [36, 36] Das Gleichheitszeichen muss angegeben werden. – alexander

0

Gemäß der JPA-Spezifikation kann Ihre Syntax nicht korrekt sein. Die vereinfachte Form der Syntax für die UPDATE Anweisung kann wie folgt angegeben werden:

UPDATE < entity_name> < identification_variable> SET < identification_variable>. < state_field> = < Wert> WHERE < Bedingung>

Angewandt für Ihren Fall es aussehen könnte:

"UPDATE HistAsociado?? e SET e.horasTrabajadas = (SELECT (CAST(c.horastd AS DECIMAL(18,2)) - CAST(c.horastotales AS DECIMAL(18,2))) AS DIFF FROM Equipo c WHERE c.id= " + equipo.getId()) 

In der obigen Aussage war ich Erraten dass HistAsociado eine Entity sein könnte Name; sonst musst du es korrigieren!

Das Ergebnis der Unterabfrage muss ebenfalls ein einzelner Wert sein.

Warnung: Die modifizierte Anweisung alle die Datensätze in der Tabelle aktualisieren würde, da es keine ist WHERE Zustand angegeben wird.

So verwenden Sie dies als Hinweis, das Problem zu lösen und es nicht verwenden, bevor Sie die korrigiert haben erraten und hinzugefügt, um den WHERE Zustand.

Weitere Informationen und Beispiele finden Sie unter JPA update statement und this one too.