2016-12-07 1 views
0

J'utilise Hibernate et je veux faire une mise à jour en vrac, en changeant le statut de tous les objets dans une liste d'identifiants. donc j'ai essayé:Hibernate Query Language (HQL) Mettre à jour la liste

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

Ce qui a provoqué une exception:

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

J'ai aussi essayé:

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

qui a causé la même exception.

Je l'insertion des paramètres comme ceci:

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

Toute idée comment faire ce travail? Merci d'avance

+0

Supprimez les Braves autour du paramètre. Ils devraient être ajoutés par hibernate – Jens

+0

J'ai retiré, mais toujours eu la même erreur :( –

Répondre

1

Status est un mot réservé par MySQL. Renommez votre colonne en autre chose

+0

Y at-il un autre moyen? Je ne pense pas que je peux facilement changer cela –

+1

Entourer le champ avec des dos est une option à long terme, mais vous aurez besoin pour les ajouter partout donc le renommage est préférable ... – Reimeus