2016-12-07 2 views
0

Ich verwende Hibernate und möchte eine Massenaktualisierung durchführen, wobei der Status aller Objekte in einer Liste von IDs geändert wird. Also habe ich versucht:Hibernate Query Language (HQL) Aktualisierungsliste

String update = "UPDATE Foo as foo SET foo.status = :status WHERE foo.id in (:idList)" 

, die eine Ausnahme verursacht:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; 

ich auch versucht:

String update = "UPDATE Foo as foo SET foo.status = :status WHERE foo.id in (SELECT id FROM Foo WHERE id in (:idList))" 

, dass die gleiche Ausnahme verursacht hat.

Ich bin Einfügen der Parameter wie folgt aus:

StatelessSession ss = sessionFactory.openStatelessSession(); 
Query query = ss.createQuery(update); 
query.setParameter("status", status); 
query.setParameterList("idList", ids); 
query.executeUpdate(); 

Irgendwelche Ideen, wie diese Arbeit zu machen? Vielen Dank im Voraus

+0

Entferne die Braves um den Parameter herum. Sie sollten von Hibernate hinzugefügt werden – Jens

+0

Ich entfernte, aber immer noch den gleichen Fehler :( –

Antwort

1

Status ist ein reserviertes MySQL-Wort. Benenne deine Spalte in etwas anderes um

+0

Gibt es eine andere Möglichkeit? Ich glaube nicht, dass ich das leicht ändern kann –

+1

Umgeben das Feld mit Backticks ist eine Option, aber langfristig müssen Sie um sie überall hinzuzufügen, so ist das Umbenennen vorzuziehen ... – Reimeus